-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy path3.2.po
4239 lines (3663 loc) · 146 KB
/
3.2.po
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2025, Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# cdarlint <cdarling@126.com>, 2021
# ww song <sww4718168@gmail.com>, 2021
# Shengjing Zhu <zsj950618@gmail.com>, 2021
# Alpha Du <alphanow@gmail.com>, 2021
# ppcfish <ppcfish@gmail.com>, 2021
# WH-2099 <wh2099@outlook.com>, 2021
# Freesand Leo <yuqinju@163.com>, 2025
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Python 3.13\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-01-03 14:16+0000\n"
"PO-Revision-Date: 2021-06-29 13:04+0000\n"
"Last-Translator: Freesand Leo <yuqinju@163.com>, 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. "
"Python 3.2 was released on February 20, 2011. It focuses on a few highlights"
" and gives a few examples. For full details, see the `Misc/NEWS "
"<https://github.com/python/cpython/blob/076ca6c3c8df3030307e548d9be792ce3c1c6eea/Misc/NEWS>`__"
" file."
msgstr ""
"这篇文章介绍了 Python 3.2 相比 3.1 新增的特性。 Python 3.2 发布于 2011 年 2 月 20 日。 "
"文章聚焦于几个关键特性并给出了一些示例。 有关完整细节,请参阅 `Misc/NEWS "
"<https://github.com/python/cpython/blob/076ca6c3c8df3030307e548d9be792ce3c1c6eea/Misc/NEWS>`__"
" 文件。"
#: ../../whatsnew/3.2.rst:60
msgid ":pep:`392` - Python 3.2 Release Schedule"
msgstr ":pep:`392` - Python 3.2 发布计划"
#: ../../whatsnew/3.2.rst:64
msgid "PEP 384: Defining a Stable ABI"
msgstr "PEP 384: 定义稳定的ABI"
#: ../../whatsnew/3.2.rst:66
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:72
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:83
msgid ":pep:`384` - Defining a Stable ABI"
msgstr ":pep:`384` - 定义稳定的ABI"
#: ../../whatsnew/3.2.rst:84
msgid "PEP written by Martin von Löwis."
msgstr "PEP 由 Martin von Löwis 撰写"
#: ../../whatsnew/3.2.rst:88
msgid "PEP 389: Argparse Command Line Parsing Module"
msgstr "PEP 389: Argparse 命令行解析模块"
#: ../../whatsnew/3.2.rst:90
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:95
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:101
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:105
msgid ""
"import argparse\n"
"parser = argparse.ArgumentParser(\n"
" description = 'Manage servers', # main description for help\n"
" epilog = 'Tested on Solaris and Linux') # displayed after help\n"
"parser.add_argument('action', # argument name\n"
" choices = ['deploy', 'start', 'stop'], # three allowed values\n"
" help = 'action on each target') # help msg\n"
"parser.add_argument('targets',\n"
" metavar = 'HOSTNAME', # var name used in help msg\n"
" nargs = '+', # require one or more targets\n"
" help = 'url for target machines') # help msg explanation\n"
"parser.add_argument('-u', '--user', # -u or --user option\n"
" required = True, # make it a required argument\n"
" help = 'login as user')"
msgstr ""
#: ../../whatsnew/3.2.rst:120
msgid "Example of calling the parser on a command string::"
msgstr "在命令字符串中调用解析器的示例::"
#: ../../whatsnew/3.2.rst:122
msgid ""
">>> cmd = 'deploy sneezy.example.com sleepy.example.com -u skycaptain'\n"
">>> result = parser.parse_args(cmd.split())\n"
">>> result.action\n"
"'deploy'\n"
">>> result.targets\n"
"['sneezy.example.com', 'sleepy.example.com']\n"
">>> result.user\n"
"'skycaptain'"
msgstr ""
">>> cmd = 'deploy sneezy.example.com sleepy.example.com -u skycaptain'\n"
">>> result = parser.parse_args(cmd.split())\n"
">>> result.action\n"
"'deploy'\n"
">>> result.targets\n"
"['sneezy.example.com', 'sleepy.example.com']\n"
">>> result.user\n"
"'skycaptain'"
#: ../../whatsnew/3.2.rst:131
msgid "Example of the parser's automatically generated help::"
msgstr "解释器自动生成的帮助示例::"
#: ../../whatsnew/3.2.rst:133
msgid ""
">>> parser.parse_args('-h'.split())\n"
"\n"
"usage: manage_cloud.py [-h] -u USER\n"
" {deploy,start,stop} HOSTNAME [HOSTNAME ...]\n"
"\n"
"Manage servers\n"
"\n"
"positional arguments:\n"
" {deploy,start,stop} action on each target\n"
" HOSTNAME url for target machines\n"
"\n"
"optional arguments:\n"
" -h, --help show this help message and exit\n"
" -u USER, --user USER login as user\n"
"\n"
"Tested on Solaris and Linux"
msgstr ""
">>> parser.parse_args('-h'.split())\n"
"\n"
"usage: manage_cloud.py [-h] -u USER\n"
" {deploy,start,stop} HOSTNAME [HOSTNAME ...]\n"
"\n"
"Manage servers\n"
"\n"
"positional arguments:\n"
" {deploy,start,stop} action on each target\n"
" HOSTNAME url for target machines\n"
"\n"
"optional arguments:\n"
" -h, --help show this help message and exit\n"
" -u USER, --user USER login as user\n"
"\n"
"Tested on Solaris and Linux"
#: ../../whatsnew/3.2.rst:150
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:153
msgid ""
"import argparse\n"
"parser = argparse.ArgumentParser(prog='HELM')\n"
"subparsers = parser.add_subparsers()\n"
"\n"
"parser_l = subparsers.add_parser('launch', help='Launch Control') # first subgroup\n"
"parser_l.add_argument('-m', '--missiles', action='store_true')\n"
"parser_l.add_argument('-t', '--torpedos', action='store_true')\n"
"\n"
"parser_m = subparsers.add_parser('move', help='Move Vessel', # second subgroup\n"
" aliases=('steer', 'turn')) # equivalent names\n"
"parser_m.add_argument('-c', '--course', type=int, required=True)\n"
"parser_m.add_argument('-s', '--speed', type=int, default=0)"
msgstr ""
"import argparse\n"
"parser = argparse.ArgumentParser(prog='HELM')\n"
"subparsers = parser.add_subparsers()\n"
"\n"
"parser_l = subparsers.add_parser('launch', help='Launch Control') # 第一个子分组\n"
"parser_l.add_argument('-m', '--missiles', action='store_true')\n"
"parser_l.add_argument('-t', '--torpedos', action='store_true')\n"
"\n"
"parser_m = subparsers.add_parser('move', help='Move Vessel', # 第二个子分组\n"
" aliases=('steer', 'turn')) # 等价的名称\n"
"parser_m.add_argument('-c', '--course', type=int, required=True)\n"
"parser_m.add_argument('-s', '--speed', type=int, default=0)"
#: ../../whatsnew/3.2.rst:166
msgid ""
"$ ./helm.py --help # top level help (launch and move)\n"
"$ ./helm.py launch --help # help for launch options\n"
"$ ./helm.py launch --missiles # set missiles=True and torpedos=False\n"
"$ ./helm.py steer --course 180 --speed 5 # set movement parameters"
msgstr ""
"$ ./helm.py --help # 最高层级的帮助 (launch 和 move)\n"
"$ ./helm.py launch --help # launch 选项的帮助\n"
"$ ./helm.py launch --missiles # 设置 missiles=True 及 torpedos=False\n"
"$ ./helm.py steer --course 180 --speed 5 # 设置动作形参"
#: ../../whatsnew/3.2.rst:175
msgid ":pep:`389` - New Command Line Parsing Module"
msgstr ":pep:`389` - 新的命令行解析模块"
#: ../../whatsnew/3.2.rst:176
msgid "PEP written by Steven Bethard."
msgstr "PEP 由 Steven Bethard 撰写"
#: ../../whatsnew/3.2.rst:178
msgid ""
":ref:`upgrading-optparse-code` for details on the differences from "
":mod:`optparse`."
msgstr "参阅 :ref:`upgrading-optparse-code` 了解与 :mod:`optparse` 的差异的细节。"
#: ../../whatsnew/3.2.rst:182
msgid "PEP 391: Dictionary Based Configuration for Logging"
msgstr "PEP 391: 基于字典的日志配置"
#: ../../whatsnew/3.2.rst:184
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:191
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:197
msgid ""
"{\"version\": 1,\n"
" \"formatters\": {\"brief\": {\"format\": \"%(levelname)-8s: %(name)-15s: %(message)s\"},\n"
" \"full\": {\"format\": \"%(asctime)s %(name)-15s %(levelname)-8s %(message)s\"}\n"
" },\n"
" \"handlers\": {\"console\": {\n"
" \"class\": \"logging.StreamHandler\",\n"
" \"formatter\": \"brief\",\n"
" \"level\": \"INFO\",\n"
" \"stream\": \"ext://sys.stdout\"},\n"
" \"console_priority\": {\n"
" \"class\": \"logging.StreamHandler\",\n"
" \"formatter\": \"full\",\n"
" \"level\": \"ERROR\",\n"
" \"stream\": \"ext://sys.stderr\"}\n"
" },\n"
" \"root\": {\"level\": \"DEBUG\", \"handlers\": [\"console\", \"console_priority\"]}}"
msgstr ""
"{\"version\": 1,\n"
" \"formatters\": {\"brief\": {\"format\": \"%(levelname)-8s: %(name)-15s: %(message)s\"},\n"
" \"full\": {\"format\": \"%(asctime)s %(name)-15s %(levelname)-8s %(message)s\"}\n"
" },\n"
" \"handlers\": {\"console\": {\n"
" \"class\": \"logging.StreamHandler\",\n"
" \"formatter\": \"brief\",\n"
" \"level\": \"INFO\",\n"
" \"stream\": \"ext://sys.stdout\"},\n"
" \"console_priority\": {\n"
" \"class\": \"logging.StreamHandler\",\n"
" \"formatter\": \"full\",\n"
" \"level\": \"ERROR\",\n"
" \"stream\": \"ext://sys.stderr\"}\n"
" },\n"
" \"root\": {\"level\": \"DEBUG\", \"handlers\": [\"console\", \"console_priority\"]}}"
#: ../../whatsnew/3.2.rst:215
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:218
msgid ""
">>> import json, logging.config\n"
">>> with open('conf.json') as f:\n"
"... conf = json.load(f)\n"
"...\n"
">>> logging.config.dictConfig(conf)\n"
">>> logging.info(\"Transaction completed normally\")\n"
"INFO : root : Transaction completed normally\n"
">>> logging.critical(\"Abnormal termination\")\n"
"2011-02-17 11:14:36,694 root CRITICAL Abnormal termination"
msgstr ""
">>> import json, logging.config\n"
">>> with open('conf.json') as f:\n"
"... conf = json.load(f)\n"
"...\n"
">>> logging.config.dictConfig(conf)\n"
">>> logging.info(\"Transaction completed normally\")\n"
"INFO : root : Transaction completed normally\n"
">>> logging.critical(\"Abnormal termination\")\n"
"2011-02-17 11:14:36,694 root CRITICAL Abnormal termination"
#: ../../whatsnew/3.2.rst:230
msgid ":pep:`391` - Dictionary Based Configuration for Logging"
msgstr ":pep:`391` - 基于字典的日志配置"
#: ../../whatsnew/3.2.rst:231
msgid "PEP written by Vinay Sajip."
msgstr "PEP 由 Vinay Sajip 撰写"
#: ../../whatsnew/3.2.rst:235
msgid "PEP 3148: The ``concurrent.futures`` module"
msgstr "PEP 3148: ``concurrent.futures`` 模块"
#: ../../whatsnew/3.2.rst:237
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:241
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:248
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:255
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:260
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:269
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:272
msgid ""
"import concurrent.futures, shutil\n"
"with concurrent.futures.ThreadPoolExecutor(max_workers=4) as e:\n"
" e.submit(shutil.copy, 'src1.txt', 'dest1.txt')\n"
" e.submit(shutil.copy, 'src2.txt', 'dest2.txt')\n"
" e.submit(shutil.copy, 'src3.txt', 'dest3.txt')\n"
" e.submit(shutil.copy, 'src3.txt', 'dest4.txt')"
msgstr ""
"import concurrent.futures, shutil\n"
"with concurrent.futures.ThreadPoolExecutor(max_workers=4) as e:\n"
" e.submit(shutil.copy, 'src1.txt', 'dest1.txt')\n"
" e.submit(shutil.copy, 'src2.txt', 'dest2.txt')\n"
" e.submit(shutil.copy, 'src3.txt', 'dest3.txt')\n"
" e.submit(shutil.copy, 'src3.txt', 'dest4.txt')"
#: ../../whatsnew/3.2.rst:281
msgid ":pep:`3148` - Futures -- Execute Computations Asynchronously"
msgstr ":pep:`3148` -- futures - 异步执行指令"
#: ../../whatsnew/3.2.rst:282
msgid "PEP written by Brian Quinlan."
msgstr "PEP 由 Brian Quinlan 撰写"
#: ../../whatsnew/3.2.rst:284
msgid ""
":ref:`Code for Threaded Parallel URL reads<threadpoolexecutor-example>`, an "
"example using threads to fetch multiple web pages in parallel."
msgstr ""
#: ../../whatsnew/3.2.rst:287
msgid ""
":ref:`Code for computing prime numbers in parallel<processpoolexecutor-"
"example>`, an example demonstrating "
":class:`~concurrent.futures.ProcessPoolExecutor`."
msgstr ""
#: ../../whatsnew/3.2.rst:293
msgid "PEP 3147: PYC Repository Directories"
msgstr "PEP 3147: PYC 仓库目录"
#: ../../whatsnew/3.2.rst:295
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:300
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:304
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:312
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:315
msgid ""
"Imported modules now have a :attr:`~module.__cached__` attribute which "
"stores the name of the actual file that was imported:"
msgstr ""
#: ../../whatsnew/3.2.rst:322
msgid ""
"The tag that is unique to each interpreter is accessible from the "
":mod:`!imp` module:"
msgstr ""
#: ../../whatsnew/3.2.rst:329
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:338
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:345
msgid ""
"The :mod:`importlib.abc` module has been updated with new :term:`abstract "
"base classes <abstract base class>` for loading bytecode files. The "
"obsolete ABCs, :class:`!PyLoader` and :class:`!PyPycLoader`, have been "
"deprecated (instructions on how to stay Python 3.1 compatible are included "
"with the documentation)."
msgstr ""
#: ../../whatsnew/3.2.rst:353
msgid ":pep:`3147` - PYC Repository Directories"
msgstr ":pep:`3147` - PYC 仓库目录"
#: ../../whatsnew/3.2.rst:354 ../../whatsnew/3.2.rst:385
msgid "PEP written by Barry Warsaw."
msgstr "PEP 由 Barry Warsaw 撰写"
#: ../../whatsnew/3.2.rst:358
msgid "PEP 3149: ABI Version Tagged .so Files"
msgstr "PEP 3149: 带有 ABI 版本标签的 .so 文件"
#: ../../whatsnew/3.2.rst:360
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:364
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:370
msgid ""
"/usr/share/pyshared/foo.cpython-32m.so\n"
"/usr/share/pyshared/foo.cpython-33md.so"
msgstr ""
"/usr/share/pyshared/foo.cpython-32m.so\n"
"/usr/share/pyshared/foo.cpython-33md.so"
#: ../../whatsnew/3.2.rst:373
msgid ""
"In Python itself, the tags are accessible from functions in the "
":mod:`sysconfig` module::"
msgstr "对于 Python 本身,可以通过 :mod:`sysconfig` 模块中的函数来访问这些标签::"
#: ../../whatsnew/3.2.rst:376
msgid ""
">>> import sysconfig\n"
">>> sysconfig.get_config_var('SOABI') # find the version tag\n"
"'cpython-32mu'\n"
">>> sysconfig.get_config_var('EXT_SUFFIX') # find the full filename extension\n"
"'.cpython-32mu.so'"
msgstr ""
">>> import sysconfig\n"
">>> sysconfig.get_config_var('SOABI') # 查找版本标签\n"
"'cpython-32mu'\n"
">>> sysconfig.get_config_var('EXT_SUFFIX') # 查找完整文件名扩展\n"
"'.cpython-32mu.so'"
#: ../../whatsnew/3.2.rst:384
msgid ":pep:`3149` - ABI Version Tagged .so Files"
msgstr ":pep:`3149` - 带有 ABI 版本标签的 .so 文件"
#: ../../whatsnew/3.2.rst:389
msgid "PEP 3333: Python Web Server Gateway Interface v1.0.1"
msgstr "PEP 3333: Python Web服务器网关接口v1.0.1"
#: ../../whatsnew/3.2.rst:391
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:396
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:400
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:408
msgid ""
"For developers porting WSGI applications from Python 2, here are the salient"
" points:"
msgstr ""
#: ../../whatsnew/3.2.rst:411
msgid ""
"If the app already used strings for headers in Python 2, no change is "
"needed."
msgstr ""
#: ../../whatsnew/3.2.rst:413
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:418
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:422
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 "
":data:`os.environ` into native strings and returning a new dictionary."
msgstr ""
#: ../../whatsnew/3.2.rst:431
msgid ":pep:`3333` - Python Web Server Gateway Interface v1.0.1"
msgstr ":pep:`3333` - Python Web服务器网关接口v1.0.1"
#: ../../whatsnew/3.2.rst:432
msgid "PEP written by Phillip Eby."
msgstr "PEP 由 Phillip Eby 撰写"
#: ../../whatsnew/3.2.rst:436
msgid "Other Language Changes"
msgstr "其他语言特性修改"
#: ../../whatsnew/3.2.rst:438
msgid "Some smaller changes made to the core Python language are:"
msgstr "对Python 语言核心进行的小改动:"
#: ../../whatsnew/3.2.rst:440
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:452
msgid ""
"(Suggested by Mark Dickinson and implemented by Eric Smith in "
":issue:`7094`.)"
msgstr ""
#: ../../whatsnew/3.2.rst:454
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:463
msgid ""
">>> import shelve\n"
">>> d = shelve.open('tmp.shl')\n"
">>> 'The {project_name} status is {status} as of {date}'.format_map(d)\n"
"'The testing project status is green as of February 15, 2011'\n"
"\n"
">>> class LowerCasedDict(dict):\n"
"... def __getitem__(self, key):\n"
"... return dict.__getitem__(self, key.lower())\n"
"...\n"
">>> lcd = LowerCasedDict(part='widgets', quantity=10)\n"
">>> 'There are {QUANTITY} {Part} in stock'.format_map(lcd)\n"
"'There are 10 widgets in stock'\n"
"\n"
">>> class PlaceholderDict(dict):\n"
"... def __missing__(self, key):\n"
"... return '<{}>'.format(key)\n"
"...\n"
">>> 'Hello {name}, welcome to {location}'.format_map(PlaceholderDict())\n"
"'Hello <name>, welcome to <location>'"
msgstr ""
">>> import shelve\n"
">>> d = shelve.open('tmp.shl')\n"
">>> 'The {project_name} status is {status} as of {date}'.format_map(d)\n"
"'The testing project status is green as of February 15, 2011'\n"
"\n"
">>> class LowerCasedDict(dict):\n"
"... def __getitem__(self, key):\n"
"... return dict.__getitem__(self, key.lower())\n"
"...\n"
">>> lcd = LowerCasedDict(part='widgets', quantity=10)\n"
">>> 'There are {QUANTITY} {Part} in stock'.format_map(lcd)\n"
"'There are 10 widgets in stock'\n"
"\n"
">>> class PlaceholderDict(dict):\n"
"... def __missing__(self, key):\n"
"... return '<{}>'.format(key)\n"
"...\n"
">>> 'Hello {name}, welcome to {location}'.format_map(PlaceholderDict())\n"
"'Hello <name>, welcome to <location>'"
#: ../../whatsnew/3.2.rst:483
msgid ""
"(Suggested by Raymond Hettinger and implemented by Eric Smith in "
":issue:`6081`.)"
msgstr "(由 Raymond Hettinger 提议并由 Eric Smith 在 :issue:`6081` 中贡献。)"
#: ../../whatsnew/3.2.rst:486
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 "
":data:`sys.flags` attribute:"
msgstr ""
#: ../../whatsnew/3.2.rst:490
msgid ""
"$ python -q\n"
">>> sys.flags\n"
"sys.flags(debug=0, division_warning=0, inspect=0, interactive=0,\n"
"optimize=0, dont_write_bytecode=0, no_user_site=0, no_site=0,\n"
"ignore_environment=0, verbose=0, bytes_warning=0, quiet=1)"
msgstr ""
"$ python -q\n"
">>> sys.flags\n"
"sys.flags(debug=0, division_warning=0, inspect=0, interactive=0,\n"
"optimize=0, dont_write_bytecode=0, no_user_site=0, no_site=0,\n"
"ignore_environment=0, verbose=0, bytes_warning=0, quiet=1)"
#: ../../whatsnew/3.2.rst:498
msgid "(Contributed by Marcin Wojdyr in :issue:`1772833`)."
msgstr "(由 Marcin Wojdyr 在 :issue:`1772833` 中贡献。)"
#: ../../whatsnew/3.2.rst:500
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:`~object.__getattr__` or "
":meth:`~object.__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:508
msgid ""
">>> class A:\n"
"... @property\n"
"... def f(self):\n"
"... return 1 // 0\n"
"...\n"
">>> a = A()\n"
">>> hasattr(a, 'f')\n"
"Traceback (most recent call last):\n"
" ...\n"
"ZeroDivisionError: integer division or modulo by zero"
msgstr ""
">>> class A:\n"
"... @property\n"
"... def f(self):\n"
"... return 1 // 0\n"
"...\n"
">>> a = A()\n"
">>> hasattr(a, 'f')\n"
"Traceback (most recent call last):\n"
" ...\n"
"ZeroDivisionError: integer division or modulo by zero"
#: ../../whatsnew/3.2.rst:519
msgid ""
"(Discovered by Yury Selivanov and fixed by Benjamin Peterson; "
":issue:`9666`.)"
msgstr "(由 Yury Selivanov 发现并由 Benjamin Peterson 修正;:issue:`9666`。)"
#: ../../whatsnew/3.2.rst:521
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:532
msgid "(Proposed and implemented by Mark Dickinson; :issue:`9337`.)"
msgstr "(由 Mark Dickinson 提议并实现;:issue:`9337`。)"
#: ../../whatsnew/3.2.rst:534
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:543
msgid "(Added by Antoine Pitrou; :issue:`9757`.)"
msgstr "(由 Antoine Pitrou 添加;:issue:`9757`。)"
#: ../../whatsnew/3.2.rst:545
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:548
msgid ""
"def outer(x):\n"
" def inner():\n"
" return x\n"
" inner()\n"
" del x"
msgstr ""
"def outer(x):\n"
" def inner():\n"
" return x\n"
" inner()\n"
" del x"
#: ../../whatsnew/3.2.rst:554
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:558
msgid ""
"def f():\n"
" def print_error():\n"
" print(e)\n"
" try:\n"
" something\n"
" except Exception as e:\n"
" print_error()\n"
" # implicit \"del e\" here"
msgstr ""
#: ../../whatsnew/3.2.rst:567
msgid "(See :issue:`4617`.)"
msgstr "(参见 :issue:`4617`。)"
#: ../../whatsnew/3.2.rst:569
msgid ""
":ref:`Struct sequence types <struct-sequence-objects>` are now subclasses of"
" tuple. This means that C structures like those returned by :func:`os.stat`,"
" :func:`time.gmtime`, and :data:`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:582
msgid ""
"(Suggested by Arfrever Frehtes Taifersar Arahesis and implemented by "
"Benjamin Peterson in :issue:`8413`.)"
msgstr ""
#: ../../whatsnew/3.2.rst:585
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:588
msgid ""
"$ export PYTHONWARNINGS='ignore::RuntimeWarning::,once::UnicodeWarning::'"
msgstr ""
#: ../../whatsnew/3.2.rst:592
msgid ""
"(Suggested by Barry Warsaw and implemented by Philip Jenvey in "
":issue:`7301`.)"
msgstr ""
#: ../../whatsnew/3.2.rst:594
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:600
msgid ""
"A :exc:`ResourceWarning` is issued at interpreter shutdown if the "
":data:`gc.garbage` list isn't empty, and if :const:`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:605
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:612
msgid ""
"$ python -q -Wdefault\n"
">>> f = open(\"foo\", \"wb\")\n"
">>> del f\n"
"__main__:1: ResourceWarning: unclosed file <_io.BufferedWriter name='foo'>"
msgstr ""
#: ../../whatsnew/3.2.rst:619
msgid ""
"(Added by Antoine Pitrou and Georg Brandl in :issue:`10093` and "
":issue:`477863`.)"
msgstr ""
#: ../../whatsnew/3.2.rst:621
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 <collections.abc.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 :data:`sys.maxsize`. This makes *range* more "
"interoperable with lists::"
msgstr ""
#: ../../whatsnew/3.2.rst:628
msgid ""
">>> range(0, 100, 2).count(10)\n"
"1\n"
">>> range(0, 100, 2).index(10)\n"
"5\n"
">>> range(0, 100, 2)[5]\n"
"10\n"
">>> range(0, 100, 2)[0:5]\n"
"range(0, 10, 2)"
msgstr ""
#: ../../whatsnew/3.2.rst:637
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:640
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 ""