2017-10-17 21 views
0

関数内のローカル変数を使用する場合、推奨されるスタイルはありますか?スタイル2のように、より明示的なローカル変数をスタイル1のように使うべきでしょうか?ベストプラクティス:関数内のローカル変数(明示的か暗黙的か)

二つの可能なスタイル:

スタイル1:

import re 


def doc_to_lower(url_raw): 
    url_lower = [word.lower() for word in url_raw] 
    return url_lower 


def process_data(url_raw): 
    url_split = re.split('//|/|-', url_raw) 
    url_lower = doc_to_lower(url_split) 
    return url_lower 

url = 'http://www.bbc.com/sport/football/41653935' 
tokens = process_data(url) 

for token in tokens: 
    print(token) 

スタイル2:

import re 


def doc_to_lower(url_raw): 
    return [word.lower() for word in url_raw] 


def process_data(url_raw): 
    return doc_to_lower(re.split('//|/|-', url_raw)) 

url = 'http://www.bbc.com/sport/football/41653935' 
tokens = process_data(url) 

for token in tokens: 
    print(token) 
+4

"多くの良い質問は、専門家の経験に基づいてある程度の意見を生成しますが、この質問に対する回答は、事実、参考文献、または特定の専門知識ではなく、概ね意見に基づいている傾向があります。 - 答えを見てみよう:「私はこれが好きだ、私の個人的なこと...」 –

+0

No.(12件) –

+1

意見を別として、スタイル1の段階的なバージョンは明確な利点がある例外。 Pythonは、例外が発生した場所を正確に説明するのはあまり良くありません。なぜなら、複雑な 'return'文のスタイルを取得しながら、非常に素早く理由を絞り込むのに役立つ' url_split'を割り当てるときに、 2は多かれ少なかれ推測を残します。 'a + b + c + d + e + f'を想像して' TypeError:+: 'int'と 'str'に対してサポートされていないオペランドの型を返します。どちらが犯人ですか?しかしそれはトレードオフです。あまりにも分割すると、コードが判読不能になります。 – Alfe

答えて

2

私は読みやすいので、私はスタイル2をprefefします。

  1. 式は非常に複雑になる:

    は、私は特定の場合には、スタイル1を使用するには、2つの理由を考えることができます。スタイル1を使用すると、式の一部を分割して読みやすい名前に割り当てることができます。

  2. サブステートメントの値が、アサートステートメント、デバッグ、またはテストケースで使用可能でなければならない場合。
4

はかなり確信して、これは個人的な意見が生じることになる場合です。しかし、私の場合、状況2は物事を表現するためのより平凡な方法を表しています。

私の答えの主な理由は、この場合の関数名がすべてそうであるという事実です。私はローカル変数を宣言する必要がある場合、または読みやすいようにする必要がある場合にのみ宣言します。

def process_data(url_raw): 
    url_split = re.split('//|/|-', url_raw) 
    url_lower = doc_to_lower(url_split) 
    return url_lower 

スタイル2:

def process_data(url_raw): 
    return doc_to_lower(re.split('//|/|-', url_raw)) 

は、それが

EDIT

私の答えはあなたのコードのこの部分を取る実証するために、

スタイル1を役に立てば幸い

コードを再利用すると、スタイル1では下がったURLが返され、スタイル2では関数がデータの処理に使用されていることがわかります。

私は専門家であるとは言いませんが、これは議論の余地があります。私は自分の要点を明確にしようとしています。

1

いつも読みやすさを考えるのにうってつけの質問です。

私の答えは、できる限り作業場所のコーディング基準に従わなければならないと思います。これは最も重要です。作業している他の開発者との一貫性が必要です。

コーディング基準がない場合は、会議を準備して一緒に書き上げてください。そうすれば、あなたはすべて同じスクリプトから作業しています(いたずらを赦してください)。コードは誰にでも読めるようになります。

私の個人的な好みは、明示的なバージョンです。私にとっては何が起こっているのかがはっきりしているので、自分自身の誤りを減らすことができます。しかし、私は、これを単純な例では少し残忍すぎるものと見なす人もいることを理解しています。私はあなたが最初に学んだ言語、そしてあなたがそれらをどこでどのように学んだのかが分かると思います。

関連する問題