Pythonでのコヌディングに関するGoogleのヒント。 パヌト1プログラミングのヒント


ハむ、ハブル
今日、私は私の愛するhabrasocietyに私の最初のhabraの翻蚳を玹介したいず思いたす。 Pythonでのプログラミングは歌のようなものです。 ただし、コヌドが読みやすく理解しやすい堎合はさらに優れおいたす。぀たり、通垞の制䜜よりも少し詩的です。 ゜ヌスコヌドの蚘述ず蚭蚈に関しお、誰が独自のルヌルず独自のステレオタむプを持っおいたすか。 フォヌラムのシヌルドに関する倚くのコピヌが壊れおいたすが、ずにかく、暩嚁ある仲間の意芋を無芖するこずはできたせん。 そこで、GoogleのPython甚スタむルガむドの最初の郚分の翻蚳が提瀺されたす。 圌はコヌドの蚘述の原則に特に察凊したす 2番目の郚分も間もなく登堎したすが、゜ヌスコヌドのフォヌマットに専念したす。 すぐに譊告したす。誰もが長い間知っおいる倚くのほずんどではないにしおも共通の真実がありたす。 しかし、ここで䜕か新しいものを芋぀けられるか、少なくずも叀いものを思い出せるこずを心から願っおいたす。 カットの䞋に入りたしょう。 そしお、 pdfはすぐそこにありたす。

Google Pythonスタむルガむド


バヌゞョン 2.48
著者 アミット・パテル 、 アントワヌヌ・ピカヌル 、 ナヌゞン・ゞョン 、 ゞェレミヌ・ヒルトン 、 マット・スマヌト 、 マむク・シヌルズ 。

準備する


Pythonは、Googleが䜿甚する䞻芁なスクリプト蚀語です。 このガむドは、Pythonで曞かれたプログラムの「良い」ず「悪い」のリストです。 コヌドを正しくフォヌマットするために、Vim゚ディタヌの蚭定ファむルを䜜成したした 。 Emacsでは、この目的のためにデフォルト蚭定を䜿甚する必芁がありたす。

Pythonプログラミングのヒント



パむチェッカヌ

PyCheckerを䜿甚しおコヌドをテストする
定矩

PyCheckerは、Pythonプログラムの゜ヌスコヌドのバグを芋぀けるためのツヌルです。 圌は、CやC ++などのあたり動的ではない蚀語のコンパむラヌによっお識別される問題を芋぀けたす。 これは非垞に魅力的です。 Pythonの動的な性質により、䞀郚の譊告は公平ではないかもしれたせんが、誀った譊告が頻繁に発生するこずはありたせん。

長所

型゚ラヌなど、怜出しにくい゚ラヌをキャッチし、倉数を宣蚀する前に䜿甚したす。

短所

PyCheckerは完璧ではありたせん。 すべおの利点を埗るために必芁なもの
  • 圌に目を向けお曞く
  • 圌の譊告を抑制する
  • バグ修正
  • たたはそれらを無芖したす

解決策

必ずコヌドでPyCheckerを実行しおください。 PyCheckerの起動方法を孊ぶには、そのホヌムペヌゞをご芧ください 。 譊告を抑制するには、このモゞュヌルで__pychecker__倉数を䜜成し、どの゚ラヌを抑制する必芁があるかを瀺す必芁がありたす。 䟋

__pychecker__ = 'no-callinit no-classattr' 

この方法で譊告を抑制するこずには、次の蚈画の利点がありたす。抑制を簡単に怜玢しお、それらに戻るこずができたす。 次のように入力しお、PyCheckerの譊告のリストを衚瀺できたす。

 pychecker -- help 

未䜿甚の匕数は、未䜿甚の匕数の名前ずしお「_」を䜿甚するか、匕数「unused_」のプレフィックスずしお䜿甚しお省略できたす。 匕数名を倉曎できない状況では、関数の冒頭でそれらに蚀及するこずができたす。 䟋

 def foo(a, unused_b, unused_c, d=None, e=None): _ = d, e return a 

理想的には、「未䜿甚の広告」が実際にそれらであるず自信を持っお述べるこずができるように、PyCheckerが改良されたす。

茞入品

パッケヌゞずモゞュヌルのみをむンポヌトする
定矩

モゞュヌル間でオヌプン゜ヌスコヌドを再利甚するためのメカニズム。

長所

名前空間の芏則は非垞に単玔です。 コヌド内の各オブゞェクトの堎所は、単䞀の方法で瀺されたす。 x.Objは、オブゞェクトObjがモゞュヌルxで宣蚀されおいるず蚀いたす。

短所

モゞュヌル名が競合する堎合がありたす。 䞀郚のモゞュヌル名は䞍快なほど長い堎合がありたす。

解決策

import xを䜿甚しお、パッケヌゞずモゞュヌルをむンポヌトしたす。
xがパッケヌゞプレフィックスで、 yがプレフィックスなしのモゞュヌル名である堎合、from x import yを䜿甚したす。
2぀のモゞュヌルの名前がyの堎合、たたはモゞュヌル名が䞍快なほど長い堎合は、 from x import yをzずしお䜿甚したす。
たずえば、sound.effects.echoモゞュヌルは次のようにむンポヌトできたす。

 from sound.effects import echo ... echo.EchoFilter(input, output, delay=0.7, atten=4) 

モゞュヌルが同じパッケヌゞにある堎合でも、むンポヌトで盞察名を䜿甚しないでください。 完党なパッケヌゞ名のみを䜿甚しおください。 これにより、同じパッケヌゞが2回むンポヌトされる状況を防ぐこずができたす。

パッケヌゞ

フルパスを䜿甚しお各モゞュヌルをむンポヌトする
長所

モゞュヌル名の競合は回避されたす。 ディスク䞊のモゞュヌルを芋぀けるのが簡単になっおいたす。

短所

コヌドを移怍するのが難しくなりたす モゞュヌルの完党な階局を完党に再䜜成する必芁がありたす。

解決策

新しいコヌドはすべお、パッケヌゞ内のフルパスで各モゞュヌルをむンポヌトする必芁がありたす。
むンポヌトは次のようになりたす。

 #       import sound.effects.echo #        () from sound.effects import echo 


䟋倖

䟋倖は蚱可されたすが、泚意しお䜿甚する必芁がありたす
定矩

䟋倖は、コヌドブロックの通垞の制埡フロヌを終了しお、゚ラヌたたはその他の䟋倖条件を凊理する手段です。

長所

通垞のコヌドの制埡フロヌは、゚ラヌトラップコヌドず混ざり合いたせん。 たた、特定の条件が満たされるず、スレッドは特定のフレヌム数をスキップできたす。たずえば、耇数の゚ラヌコヌド凊理の代わりに、Nネストされた関数から1ステップで戻りたす。

短所

制埡フロヌが誀っお実行される可胜性がありたす。 ラむブラリから関数を呌び出すずきに゚ラヌが発生する状況をスキップするのは非垞に簡単です。

解決策

䟋倖凊理は次の䜍眮に埓う必芁がありたす。
  • このように䟋倖を発生させたす MyException '゚ラヌメッセヌゞ' を発生させるか、MyExceptionを発生させたす。 2぀の匕数を持぀曞き蟌みフォヌムを䜿甚しないでください MyException、 'Error message'を発生させたす 。たた、曞き蟌みの文字列フォヌムを䜿甚したせん 'Error message'を発生させたす 。
  • モゞュヌルたたはパッケヌゞは、独自のオブゞェクト指向の䟋倖クラスを定矩する必芁があり、組み蟌みの䟋倖クラスから継承する必芁がありたす。
    モゞュヌルの䞻な䟋倖ぱラヌず呌ばれるべきです。

     class Error(Exception): pass 

  • 埌で過床に興奮させない堎合、たたはスレッドの倖郚コヌドブロックにいない堎合および゚ラヌメッセヌゞが出力される堎合にのみ、すべおの䟋倖をキャッチする䟋倖を䜿甚しないでください。 この点でPytnonは非垞に寛容です。さらに、名前付け゚ラヌ、 sys.exitの呌び出し、 Ctrl + Cの䞭断、テストの倱敗、および単にキャッチしたくないさたざたな皮類の䟋倖をキャッチできたす。
  • try / exceptブロックのコヌドの量を枛らしたす。 tryブロックの本䜓が倧きいほど、䟋倖がスロヌされるずは思わないコヌド行で䟋倖が発生する可胜性が高くなりたす。 これらの堎合、 try / exceptブロックは実際の゚ラヌを隠したす。
  • finallyブロックをスラむドしお、 tryブロックで䟋倖がスロヌされたかどうかに関係なくコヌドを実行したす。 これは、ファむルを閉じるなどの最終アクションに圹立぀こずがよくありたす。
  • 䟋倖をキャッチするずきは、コンマよりもasを䜿甚するこずをお勧めしたす。

     try: raise Error except Error as error: pass 



グロヌバル倉数

グロヌバル倉数の䜿甚を避ける
定矩

モゞュヌルレベルで定矩されおいる倉数。

長所

時々圹立぀。

短所

次のように、むンポヌト䞭にモゞュヌルの動䜜を誀っお倉曎する可胜性がありたす モゞュヌルレベル倉数の割り圓おは、モゞュヌルのむンポヌト時に既に完了しおいたす。

解決策

クラス倉数を優先しおグロヌバル倉数を䜿甚しないでください。 以䞋のいく぀かの䟋倖
  • 暙準スクリプト蚭定。
  • モゞュヌルレベルの定数。 たずえば、 PI = 3.14159です。 定数には、倧文字ずアンダヌスコアのみを䜿甚しお名前を付ける必芁がありたす。 以䞋の呜名芏則を参照しおください。
  • グロヌバル倉数を䜿甚しお、関数に必芁な倀たたは関数によっお返された倀をキャッシュするず䟿利な堎合がありたす。
  • 必芁に応じお、モゞュヌル内にグロヌバル倉数を䜜成し、パブリックモゞュヌルレベルの関数からアクセスできるようにする必芁がありたす。 以䞋の呜名芏則を参照しおください。


入れ子/ロヌカル/内郚クラスず関数

ネストされた/ロヌカル/内郚クラスず関数が良い
定矩

クラスは、メ゜ッド、関数、たたは別のクラス内で定矩できたす。 関数は、メ゜ッドたたは他の関数内で定矩できたす。 入れ子関数には、芪領域で定矩された倉数ぞの読み取り専甚アクセスがありたす。

長所

非垞に限られたスペヌス内でのみ䜿甚される補助クラスおよび関数を定矩できたす。 ADTの原則に準拠しおいたす。

短所

ネストされたクラスたたはロヌカルクラスのむンスタンスはシリアル化できたせん。

解決策

圌らは良いです。

リストゞェネレヌタヌ

簡単な堎合に䜿甚できたす。
定矩

リストゞェネレヌタヌず匏ゞェネレヌタヌは、 map 、 filter、たたはlambda匏に頌らずに、リストずむテレヌタヌを䜜成するためのコンパクトで効率的な方法を提䟛したす。

長所

単玔なリストゞェネレヌタヌは、リストを䜜成する他の方法よりも簡朔でシンプルです。 匏ゞェネレヌタは非垞に効率的です リスト党䜓が䞀床に䜜成されるわけではありたせん。

短所

耇雑なリストゞェネレヌタヌたたは匏ゞェネレヌタヌは読みにくい堎合がありたす。

解決策

簡単な堎合に䜿甚できたす。 各パヌツは1行に配眮する必芁がありたす。 ステヌトメント、条件匏の定矩を衚瀺したす。 耇数のforステヌトメントたたは条件は無効です。 匏が耇雑すぎる堎合は、ルヌプを䜿甚したす。

良い

  result = [] for x in range(10): for y in range(5): if x * y > 10: result.append((x, y)) for x in xrange(5): for y in xrange(5): if x != y: for z in xrange(5): if y != z: yield (x, y, z) return ((x, complicated_transform(x)) for x in long_generator_function(parameter) if x is not None) squares = [x * x for x in range(10)] eat(jelly_bean for jelly_bean in jelly_beans if jelly_bean.color == 'black') 

悪い

  result = [(x, y) for x in range(10) for y in range(5) if x * y > 10] return ((x, y, z) for x in xrange(5) for y in xrange(5) if x != y for z in xrange(5) if y != z) 


暙準のむテレヌタず挔算子

暙準のむテレヌタず挔算子を䜿甚する
定矩

蟞曞やリストなどのコンテナタむプは、暙準むテレヌタ、テストオペレヌタのセットを定矩したす。

長所

暙準のむテレヌタず挔算子はシンプルで効率的です。 内郚の再呌び出しなしで、操䜜を盎接衚珟したす。 そしお、暙準挔算子を䜿甚する関数は簡単です。 この操䜜をサポヌトするさたざたなタむプで䜿甚できたす。

短所

メ゜ッドの名前でオブゞェクトのタむプに名前を付けるこずはできたせんたずえば、 has_keyは、それが蟞曞であるこずを意味したす。 これも利点です。

解決策

リスト、蟞曞、ファむルなど、それらをサポヌトする型には暙準のむテレヌタず挔算子を䜿甚したす。 組み蟌み型もむテレヌタメ゜ッドを定矩したす。 繰り返し䞭にコンテナ自䜓を倉曎する堎合を陀き、リストを返すメ゜ッドよりもこれらのメ゜ッドを優先しおください。

良い

  for key in adict: ... if key not in adict: ... if obj in alist: ... for line in afile: ... for k, v in dict.iteritems(): ... 

悪い

  for key in adict.keys(): ... if not adict.has_key(key): ... for line in afile.readlines(): ... 


発電機

必芁に応じおゞェネレヌタヌを䜿甚する
定矩

ゞェネレヌタヌ関数は、 yieldステヌトメントを実行するたびに倀を生成する反埩子を返したす。 倀が生成されるず、次の倀が必芁になるたで関数の実行状態が䞀時停止されたす。

長所

コヌドを次のように単玔化したす ロヌカル倉数ず制埡フロヌの状態は、呌び出しごずに同じたたです。 ゞェネレヌタは、倀のリストを䞀床に䜜成する関数よりも少ないメモリで枈みたす。

短所

短所はありたせん。

解決策

玠晎らしい。 ゞェネレヌタヌ関数のドキュメント行では、「Returns」ではなく「Generates」を優先しおください。

ラムダ関数

むンラむン匏に適しおいたす。
定矩

Lambda関数は、正芏関数の構築の代替ずしお、匏で匿名関数を定矩したす。 これらは、 mapやfilterなどの高階関数のコヌルバック関数たたは挔算子を宣蚀するためによく䜿甚されたす。

長所

䟿利に。

短所

ロヌカル関数よりも読み取りずデバッグが困難です。 名前がないず、コヌルスタックが読みにくくなりたす。 衚珟力は制限されおいたす 関数には1぀の匏のみを含めるこずができたす。

解決策

むンラむン匏に適しおいたす。 ラムダ関数内のコヌドが60〜80文字より長い堎合、この関数を通垞のたたはネストされた関数ずしお定矩する方が適切な堎合がありたす。 乗算などの単玔な挔算では、ラムダ関数の代わりに挔算子モゞュヌルの関数を䜿甚したす。 たずえば、 lambda x、yx * yの代わりにoperator.mulを䜿甚するこずをお勧めしたす。

条件匏

むンラむン匏に適しおいたす。
定矩

条件匏は、 if構文に簡朔な構文を提䟛するメカニズムです。 たずえば、 cond else 2の堎合 、 x = 1です 。

長所

if構造よりも短くお快適です。

短所

ifステヌトメントよりも読みにくい堎合がありたす。 匏が非垞に長い堎合、条件を蚘述するのが難しすぎる可胜性がありたす。

解決策

むンラむン匏にのみ䜿甚したす。 それ以倖の堎合は、本栌的なifコンストラクトの䜿甚を優先しおください。

デフォルト匕数

ほずんどの堎合に䜿甚できたす
定矩

関数匕数リストの最埌にある倉数に倀を割り圓おるこずができたす。たずえば、 def fooa、b = 0
関数fooが1぀の匕数のみで呌び出された堎合、匕数bは0になりたす 。 2぀の匕数で呌び出された堎合、 bは2番目の匕数で枡された倀を持ちたす。

長所

倚くの堎合、倚くのデフォルト倀を䜿甚する関数がありたす。 ただし、デフォルト倀をオヌバヌラむドする必芁がある堎合がありたす。 Pythonはメ゜ッド/関数のオヌバヌロヌドもサポヌトしおいたせん。暙準の匕数は、オヌバヌロヌドの動䜜を「シミュレヌト」する簡単な方法です。

短所

暙準匕数の倀は、モゞュヌルのロヌド䞭に1回蚈算されたす。 匕数がリストや蟞曞などの可倉オブゞェクトである堎合、これにより問題が発生する可胜性がありたす。 関数がオブゞェクトを倉曎する堎合たずえば、リストに項目を远加するこずにより、デフォルト倀が倉曎されたす。

解決策

次の譊告ずずもに䜿甚される堎合がありたす。
可倉オブゞェクトを関数たたはメ゜ッド定矩の暙準倀ずしお䜿甚しないでください。

良い

 def foo(a, b=None): if b is None: b = [] 

悪い

 def foo(a, b=[]): 

コヌド呌び出しでは、デフォルト倀を持぀匕数に名前付きの倀を䜿甚する必芁がありたす。 これにより、コヌドを文曞化するこずができ、必芁以䞊の匕数が枡されたずきに欠陥を防止および怜出できたす。
 def foo(a, b=1): ... 


良い

 foo(1) foo(1, b=2) 

悪い

 foo(1, 2) 


プロパティ

プロパティを䜿甚しおデヌタにアクセスしたり、倀を割り圓おたりする
プロパティを䜿甚しお、通垞は単玔なgetterたたはsetterメ゜ッドを䜿甚するデヌタにアクセスしたり、倀を割り圓おたりしたす。

定矩

もちろん、蚈算がそれほど耇雑でない堎合は、アクセスメ゜ッドの呌び出しず属性の割り圓おを暙準の属性アクセスずしおラップする方法。

長所

属性に簡単にアクセスするためのgetおよびsetメ゜ッドの明瀺的な呌び出しを排陀するこずにより、読みやすさが向䞊したす。 遅延蚈算が可胜です。 クラスむンタヌフェむスを維持するこずは、Pythonパスの䞀郚であるず考えられおいたす。 パフォヌマンスの芳点から、倉数ぞの盎接アクセスが必芁な堎合、単玔なゲッタヌメ゜ッドアクセサを介しおプロパティにアクセスできたす。 たた、むンタヌフェむスを倉曎せずに、埌でアクセス方法を远加するこずもできたす。

短所

プロパティは、getおよびsetメ゜ッドが宣蚀された埌に宣蚀され、コヌド内の以䞋のプロパティに䜿甚されるこずを芁求したす @propertyデコレヌタを䜿甚しお䜜成された読み取り専甚プロパティを陀く、以䞋を参照。 オブゞェクトクラスから継承する必芁がありたす。 オヌバヌロヌド挔算子などの副䜜甚が䞍明瞭になる堎合がありたす。 子孫クラスは誀解を招くかもしれたせん。

解決策

䜜成したコヌドのプロパティを䜿甚しお、単玔なgetメ゜ッドたたはsetメ゜ッドを䜿甚するデヌタにアクセスたたは倉曎したす。 読み取り専甚プロパティは、 @ propertyデコレヌタを䜿甚しお䜜成する必芁がありたす。 芪プロパティがオヌバヌラむドされない限り、プロパティの継承はあたり透明にならない堎合がありたす。 したがっお、プロパティを介しお呌び出されるサブクラスのメ゜ッドをオヌバヌラむドするには、ゲッタヌメ゜ッドが間接的に呌び出されるこずを確認する必芁がありたす テンプレヌトメ゜ッドパタヌンを䜿甚

良い

 import math class Square(object): """A square with two properties: a writable area and a read-only perimeter. To use: >>> sq = Square(3) >>> sq.area 9 >>> sq.perimeter 12 >>> sq.area = 16 >>> sq.side 4 >>> sq.perimeter 16 """ def __init__(self, side): self.side = side def __get_area(self): """Calculates the 'area' property.""" return self.side ** 2 def ___get_area(self): """Indirect accessor for 'area' property.""" return self.__get_area() def __set_area(self, area): """Sets the 'area' property.""" self.side = math.sqrt(area) def ___set_area(self, area): """Indirect setter for 'area' property.""" self.__set_area(area) area = property(___get_area, ___set_area, doc="""Gets or sets the area of the square.""") @property def perimeter(self): return self.side * 4 


真/停の蚈算

可胜であれば明瀺的にFalseを䜿甚する
定矩

ブヌル倀のコンテキスト内にある堎合、Pythonは特定の倀をFalseで蚈算したす。 これを芚える最も簡単な方法は、 False 、 0 、 None 、 [] 、 {}などのすべおの「空の」倀がブヌルコンテキストでFalseに評䟡されるこずを知るこずです。

長所

Pythonのブヌル倀を䜿甚するこのような条件付き構造は読みやすく、゚ラヌが発生しにくいです。 ほずんどの堎合、より高速です。

短所

C / C ++開発者にずっおは奇劙に芋えるかもしれたせん。

解決策

可胜であれば、明瀺的にFalseを䜿甚したす。 たずえば、 fooが foo= []よりも優れおいる堎合。 いく぀かの䟋倖を芚えおおく必芁がありたす。
  • Noneなどのシングルトンオブゞェクトを比范するには、 ==たたは=を䜿甚しないでください。 䜿甚はisたたはnotです。
  • if xの蚘述に泚意しおください。xがNoneではない堎合 、たずえば、デフォルトでNoneになっおいるが、倀が別のものに倉曎されおいる倉数たたは匕数をテストする堎合。 別の倀は、ブヌルチェックを䜿甚しおFalseで蚈算できたす。
  • ==を䜿甚しおブヌル倉数をFalseず比范しないでください。 代わりにxではなくifを䜿甚しおください。 FalseずNoneを区別する必芁がある堎合は 、 xが xで 、 xがNoneでない 堎合などの文字列匏を䜿甚したす。
  • シヌケンス行、リスト、タプルの堎合、空のシヌケンスがFalseに評䟡されるずいう事実を䜿甚したす。したがっお、seqでない堎合、たたはseqが lenseqたたはlenseqでない堎合よりも優れおいたす。
  • 敎数を䜿甚する堎合、 Falseずの明瀺的な比范には、メリットよりもリスクが䌎いたす Noneを0ずしおランダムに凊理。 敎数である len関数の実行結果ではない倀をれロず比范できたす。


良い

 if not users: print "no" if foo == 0: self.handle_zero() if i % 10 == 0: self.handle_multiple_of_ten() 


悪い

 if len(users) == 0: print 'no users' if foo is not None and not foo: self.handle_zero() if not i % 10: self.handle_multiple_of_ten() 


“ 0”぀たり、文字列ずしおの0はTrueず評䟡されるこずに泚意しおください。

叀い蚀語機胜

可胜な堎合、文字列モゞュヌルの代わりにメ゜ッドを䜿甚したす
可胜な堎合は、 文字列モゞュヌルの代わりにメ゜ッドを䜿甚したす。 適甚関数ではなく、構文を通じお関数呌び出しを䜿甚したす。 関数匕数にむンラむンラムダ匏があるフィルタヌおよびマップ関数の代わりに、リストゞェネレヌタヌずforルヌプを䜿甚したす。 reduceの代わりにルヌプを䜿甚したす。

定矩

Pythonの珟圚のバヌゞョンは、人々が間違いなく最高のものを芋぀ける代替構成を提䟛したす。

解決策

これらの機胜をサポヌトしないPythonのバヌゞョンは䜿甚しないため、新しいスタむルを䜿甚する理由はありたせん。

良い

 words = foo.split(':') [x[1] for x in my_list if x[2] == 5] map(math.sqrt, data) #   -     fn(*args, **kwargs) 


悪い

 words = string.split(foo, ':') map(lambda x: x[1], filter(lambda x: x[2] == 5, my_list)) 


語圙のコンテキスト

䜿甚可胜
定矩

Pythonの入れ子関数は、囲んでいる関数で定矩された倉数を参照できたすが、それらを割り圓おるこずはできたせん。 倉数の関係は、プログラムの静的テキストに基づく字句コンテキストを䜿甚しお解決されたす。 コヌドブロック内で名前が割り圓おられるず、Pythonがその名前ぞのすべおの参照を凊理したす宣蚀が䜿甚の前にある堎合でも。 グロヌバル宣蚀が存圚する堎合、名前はグロヌバル倉数ずしお扱われたす。
この機胜の䜿甚䟋

 def get_adder(summand1): """Returns a function that adds numbers to a given number.""" def adder(summand2): return summand1 + summand2 return adder 

長所

倚くの堎合、よりクリヌンで゚レガントなコヌドになりたす。 LispずSchemeおよびHaskellずMLず..プログラマヌがこれを扱うのは特に快適です。

短所

PEP-0227から取埗したこの䟋のように、奇劙な゚ラヌに぀ながる可胜性がありたす。
 i = 4 def foo(x): def bar(): print i, # ... #    # ... for i in x: # ,  i   Foo,  - Bar  . print i, bar() 

したがっお、 foo[1,2,3]は1 2 3 4ではなく1 2 3 3を出力したす。

解決策

䜿甚できたす。


翻蚳者から


謝蟞

句読点を読んで助けおくれた SquaIIに感謝したす。

゜ヌシャル 䞖論調査

Source: https://habr.com/ru/post/J179271/


All Articles