ホームページ バックエンド開発 Python チュートリアル Python コードをより Python らしくするにはどうすればよいでしょうか?

Python コードをより Python らしくするにはどうすればよいでしょうか?

Oct 17, 2016 pm 05:22 PM

Pythonic を中国語に翻訳すると、非常にPython的です。中国では、「とても女の子らしい」、「とても代表的なサッカーチーム」、「とてもCCTV」など、「とても+」という名詞構造が多く使われています。 ·

以下では簡単にするために、Python 的な記述方法を表すために P を使用し、非 Python 的な記述方法を表すために NP を使用します。 もちろん、この P-NP はその P-NP ではありません。

なぜ Python を追求するのですか?

NP と比較して、P の記述方法は簡潔、明確、エレガントです。ほとんどの場合、実行効率が高く、コードが少ないほどエラーが発生しにくくなります。優れたプログラマーはコードを書くときにコードの正確さ、簡潔さ、読みやすさを追求するべきだと思います。これはまさに Python の精神です。

他のプログラミング言語の経験があり、Python を初めて使用するプログラマー (私のような) にとって、Python の記述方法を認識すると、Python コードを記述する際の利便性と効率が向上します。また、この記事の主な読者もまた、このプログラマーのグループになります。

読者の参考のために、P と NP の N 例を以下に示します。


PとNPの例

連鎖比較

P:

a = 3
b = 1
1 <= b <= a < 10  #True
ログイン後にコピー

NP:

a = 3
b = 1
b >= 1 and b <= a and a < 10 #True
ログイン後にコピー

Pは小学生でも理解できるシンプルでわかりやすい文法州コード~


Truth Test

P:

name = &#39;Tim&#39;
langs = [&#39;AS3&#39;, &#39;Lua&#39;, &#39;C&#39;]
info = {&#39;name&#39;: &#39;Tim&#39;, &#39;sex&#39;: &#39;Male&#39;, &#39;age&#39;:23 }    
  
if name and langs and info:
    print(&#39;All True!&#39;)  #All True!
ログイン後にコピー

NP:

if name != &#39;&#39; and len(langs) > 0 and info != {}:
    print(&#39;All True!&#39;) #All True!
ログイン後にコピー

つまり、Pの書き方は、判定条件を書かずに、あらゆる対象の真偽を直接判定するというものです。これにより、正確性が保証されるだけでなく、コードの量も削減されます。


真偽値テーブル (false を覚えておくと多くのコードを節約できます!)

真偽

真偽

空でない任意の文字列空の文字列''

0 以外の任意の数値数値1

P の書き方はシンプルで、テスト後の方が効率的です。


回文の検出に使用すると、input == input[::-1] という文になりますが、なんとも優雅ですね。

文字列リストの接続

P:

def reverse_str( s ):
    return s[::-1]
ログイン後にコピー

NP:

def reverse_str( s ):
    t = &#39;&#39;
    for x in xrange(len(s)-1,-1,-1):
        t += s[x]
    return t
ログイン後にコピー

string.join()は、NP、Pと比較して、リスト内の文字列を結合するためによく使用されます。この方法は非常に効率的でエラーがありません。


リストの合計、最大値、最小値、積

P:

strList = ["Python", "is", "good"]  
  
res =  &#39; &#39;.join(strList) #Python is good
ログイン後にコピー

NP:

res = &#39;&#39;
for s in strList:
    res += s + &#39; &#39;
#Python is good
#最后还有个多余空格
ログイン後にコピー


リストの長さが10000000 、私のマシンのリストを合計すると、P は 0.6 秒、NP は 1.3 秒かかり、その差はほぼ 2 倍です。したがって、自分自身の車輪を再発明しないでください。

リスト内包表記

P:

numList = [1,2,3,4,5]   
sum = sum(numList)  #sum = 15
maxNum = max(numList) #maxNum = 5
minNum = min(numList) #minNum = 1
from operator import mul
prod = reduce(mul, numList, 1) #prod = 120 默认值传1以防空列表报错
ログイン後にコピー


NP:

sum = 0
maxNum = -float(&#39;inf&#39;)
minNum = float(&#39;inf&#39;)
prod = 1
for num in numList:
    if num > maxNum:
        maxNum = num
    if num < minNum:
        minNum = num
    sum += num
    prod *= num
# sum = 15 maxNum = 5 minNum = 1 prod = 120
ログイン後にコピー

ご存知のとおり、P のリスト内包表記を使用すると、新しいリストの作成が非常に簡単かつ直感的になります。


辞書のデフォルト値

P:

l = [x*x for x in range(10) if x % 3 == 0]
#l = [0, 9, 36, 81]
ログイン後にコピー

NP:

l = []
for x in range(10):
    if x % 3 == 0:
        l.append(x*x)
#l = [0, 9, 36, 81]
ログイン後にコピー

dictのget(key,default)メソッドは、keyの値を取得するために使用されます。辞書(存在しない場合) このキーの場合、キーにはデフォルト値defaultが割り当てられます。


NP に比べて、P は if...else... の記述が少なく、if...else... が嫌いな人にとっては本当に最初の選択肢です。

for...else... ステートメント

P:

dic = {&#39;name&#39;:&#39;Tim&#39;, &#39;age&#39;:23}  
  
dic[&#39;workage&#39;] = dic.get(&#39;workage&#39;,0) + 1
#dic = {&#39;age&#39;: 23, &#39;workage&#39;: 1, &#39;name&#39;: &#39;Tim&#39;}
ログイン後にコピー

NP:

if &#39;workage&#39; in dic:
    dic[&#39;workage&#39;] += 1
else:
    dic[&#39;workage&#39;] = 1
#dic = {&#39;age&#39;: 23, &#39;workage&#39;: 1, &#39;name&#39;: &#39;Tim&#39;}
ログイン後にコピー

for...else... の else 部分は、処理に使用されます。 for ループ条件から中断されない項目。これを使用すると、for ループが発生するかどうかを確認するために状態変数を設定する必要がなく、シンプルで便利です。


三項記号の置換

P:

for x in xrange(1,5):
    if x == 5:
        print &#39;find 5&#39;
        break
else:
    print &#39;can not find 5!&#39;
#can not find 5!
ログイン後にコピー

NP:

find = False
for x in xrange(1,5):
    if x == 5:
        find = True
        print &#39;find 5&#39;
        break
if not find:
    print &#39;can not find 5!&#39;
#can not find 5!
ログイン後にコピー

C でのプログラミング経験がある場合は、 A ? B : C の代替案を探すでしょう。 A と B または C は問題ないように見えますが、b = a > 1 で、実際の意図は False を返す必要があるにもかかわらず、False または True は True を返します。


b = False if a > 1 else True を使用すると正しく False が返されるため、本物の 3 項記号の置換になります。 Enumerate インデックス添字の開始位置を調整します。デフォルトは 0 です。

zip を使用してキーと値のペアを作成します

P:

a = 3  
  
b = 2 if a > 2 else 1
#b = 2
ログイン後にコピー

NP:

if a > 2:
    b = 2
else:
    b = 1
#b = 2
ログイン後にコピー
zip メソッドはタプルを返し、それを使用してキーと値のペアを作成します。シンプルかつ明確です。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

See all articles