あなたが知らないPythonの本質

序文

この記事のテキストと写真はインターネットからのものであり、学習とコミュニケーションのみを目的としています。これらは商用目的ではありません。ご不明な点がございましたら、処理についてお問い合わせください。

PS:Pythonの学習教材が必要な場合は、以下のリンクをクリックして自分で入手できます

Pythonの無料学習資料とグループコミュニケーションの回答クリックして参加


そして、彼がプログラミング言語と比較したところ、Pythonはどのようなスタイルですか?多くのプログラマーはインデントを言うでしょう。確かに、インデントはPython言語の特徴的な機能ですが、これは外部的で形式的なものにすぎません。言語機能の観点から、Pythonの機能は何ですか?知乎で検索してみましたが、最も代表的な答えは、シンプルな構文、習得しやすい、効率的なコード、強力な機能の4つです。これらの4つの項目を注意深く味わった後でも、これはPython言語の使用効果またはユーザーエクスペリエンスであり、言語機能レベルの機能ではないと感じています。

  • 言い換えれば、Pythonには簡潔な構文、習得が容易、効率的なコード、強力な機能の特徴があると一般に信じさせるPythonの言語機能は何ですか?個人的には、これはリスト、辞書、タプル、セットの「4人の王」によるものだと思います。整数(int)、浮動小数点(float)、文字列(str)も重要ですが、他のプログラミング言語と比較したこれら3つのオブジェクトの違いは、「FourKingKong」ほど明白ではありません。リスト、辞書、タプル、セットは、Python言語のコアと基盤、およびPythonの本質を表していると言っても過言ではありません。リスト、辞書、タプル、セットの使い方を学ぶことは、Pythonのプログラミング言語を習得することを意味します。
  • この見解に同意すると、Pythonの本質は、リスト、辞書、タプル、およびセットの「4つのキングコング」から、角括弧、中括弧、および括弧で構成される「ブラケットファミリ」に進化します。

1.角かっこ

角括弧は、すべてのプログラミング言語のほぼ最初の記号です。ここでの最初のものは、使用頻度ではなく、この記号によって表示されるプログラミング言語の意味合いと創造性です。実際、記号の使用頻度に関しては、角括弧も最初にランク付けされる可能性があります。これは私の直感であり、統計的なサポートはありません。

1.1リストを作成する

手始めに、リストを作成する最も一般的な方法は角かっこを使用することです。

 

 

ベテランでさえ、特に内包表記を使用してリストを作成する場合、リストを作成するために角括弧を頻繁に使用します。

 


しかし、私はいつも、角括弧は俗語や俗語のようなもので、カジュアルすぎると感じていました。strict list()を使用してリストを作成することを好みます。list()を使用してリストを作成することは、リストクラスをインスタンス化する標準的な方法です。リストクラスのコンストラクターがさまざまなタイプのパラメーターにどのように適応するかを体験できます。

1.2リストの索引

角括弧はリストを作成できますが、角括弧はインデックス作成にも使用されるため、角括弧はリストと同等ではありません。

 

 

リストのインデックスは非常に柔軟で、特に負のインデックスの導入では、-1を使用して最後の要素または逆の順序を示します。これは本当に嬉しいことです。上記の操作は一般的なインデックス方式です。次のコードが読めれば、十分なスキルがあることを意味します。

 

1.3リスト方式

リストオブジェクトのメソッドが簡単に入手できる場合は、Pythonマスターです。

 

2.中括弧

中括弧は、ほとんどの初心者が考える辞書オブジェクトを表します。しかし、これは間違っており、少なくとも一方的なものです。次のコードでは、aとbの両方が中括弧で作成されたオブジェクトですが、一方は辞書で、もう一方はコレクションです。

 

 

Pythonは、中括弧を使用して2種類のオブジェクトを表すことがわかりました。辞書とコレクション:中括弧内の空またはキーと値のペアは辞書を表し、繰り返し要素のない中括弧はコレクションを表します。誤解を招かないように、dict()を使って辞書を生成し、set()を使ってセットを生成することに慣れています。

 


コーディングの実践では、コレクションがかけがえのない場合もありますが、コレクションの使用頻度は「フォーキングコング」の中で最も低く、ここでは説明せず、辞書の使用についてのみ説明します。

2.1キーが辞書に存在するかどうかを判断する

Py2の時代には、dictオブジェクトにはhas_key()メソッドがあり、キーが含まれているかどうかを判断していました。Py3はこのメソッドを破棄します。キーがディクショナリに存在するかどうかを判断するには、inメソッドのみを使用できます。

 

2.2新しいキーを追加するか、キー値を辞書に更新します

多くの人は、キーを辞書に割り当てる方法を使用して、新しいキーを追加したり、キー値を辞書に更新したりすることを好みます。

 

 

この方法はお勧めしません。update()を使用する方が儀式的であり、一度に複数のキーを追加または変更できます。

 

2.3辞書からキー値を取得する

a ['age']が最も一般的に使用される方法ですが、キーが存在しない場合も例外です。以下の方法をお勧めします。

>>> a.get('age', 18)
18

2.4辞書のすべてのキー、すべての値、およびすべてのキーと値のペアを取得します

dictクラスは、keys()、values()、items()の3つのメソッドを提供して、辞書のすべてのキー、すべての値、およびすべてのキーと値のペアをそれぞれ返します。返される結果はリストではなく、イテレータであることに注意してください。リストの形式で返される結果が必要な場合は、list()変換を使用してください。

 

2.5辞書の反復

辞書をトラバースするとき、多くの学生は辞書をトラバースするためのkeys()を書くかもしれません。実際、それほど面倒である必要はなく、次のように直接トラバースできます。

 

3.括弧

括弧はタプルオブジェクトを表しているので、問題はないはずですよね?確かに問題ないように聞こえますが、タプルを使用する場合、すべての初心者が少なくとも1回は同じピットに陥ると思います。

3.1入らなければならない浅いピット

リストで使用されていないタプルの最も重要な機能は、要素の値を更新できないことです。これを忘れたり無視したりすると、穴に落ちてしまいます。

 

3.2必見のピット

Pythonを長年使用した後、私がこれまでに書いた中で最悪のバグは次のコードです。

>>> import threading
>>> def do_something(name):
        print('My name is %s.'%name)

>>> th = threading.Thread(target=do_something, args=('xufive'))
>>> th.start()
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
TypeError: do_something() takes 1 positional argument but 6 were given

明確に1つのパラメーターのみを指定しましたが、6つのパラメーターを指定するように求められました。なぜですか。タプルが初期化されるときに、パラメーターが1つしかない場合は、単一のパラメーターの後にコンマ(、)を追加する必要があります。そうしないと、初期化結果は元のパラメーターのみを返します。

>>> a = (5)
>>> a
5
>>> type(a)
<class 'int'>
>>> b = ('xyz')
>>> b
'xyz'
>>> type(b)
<class 'str'>
>>> a, b = (5,), ('xyz',)
>>> a, b
((5,), ('xyz',))
>>> type(a), type(b)
(<class 'tuple'>, <class 'tuple'>)

3.3シングルスターアンパックタプル

出力文字列をフォーマットするとき、C言語スタイルが私のお気に入りです。一致させる必要のある%sが複数ある場合、以下が最も自然な記述方法です。

>>> args = (95,99,100)
>>> '%s:语文%d分,数学%d分,英语%d分'%('天元浪子', args[0], args[1], args[2])
'天元浪子:语文95分,数学99分,英语100分'

正しいことは正しいですが、十分に刺激的ではありません。満点はこのように書く必要があります。

>>> args = (95,99,100)
>>> '%s:语文%d分,数学%d分,英语%d分'%('天元浪子', *args)
'天元浪子:语文95分,数学99分,英语100分'

3.4なぜタプルを使用するのですか?

タプルの要素は変更できないのに、なぜタプルを使用するのですか?タプルの代わりにリストを使用する方が便利ではないでしょうか。ほとんどの場合、タプルの代わりにリストを使用できることは事実ですが、次の例は、リストがタプルを置き換えることができないことを証明できます。

>>> s = {1,'x',(3,4,5)}
>>> s
{1, (3, 4, 5), 'x'}
>>> s = {1,'x',[3,4,5]}
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    s = {1,'x',[3,4,5]}
TypeError: unhashable type: 'list'

コレクションにタプルを追加することはできますが、リストはハッシュできないため、リストは追加できません。これを理解するのは難しいことではありません。リスト要素は動的に変更できるため、固定ハッシュ値はありません。これは、セットに必要な要素の一意性と競合します。タプルの要素は更新が禁止されており、ハッシュ値はです。ライフサイクル全体は変更されないため、コレクションの要素になることができます。
明らかに、タプルとリストの保存方法はまったく異なります。更新の問題を考慮する必要がないため、タプルの速度パフォーマンスはリストの速度パフォーマンスよりもはるかに優れています。タプルを優先することは、Pythonプログラマーが従う基本原則になるはずです。

おすすめ

転載: blog.csdn.net/pythonxuexi123/article/details/112908054