Pythonの高度な知識ポイント

“A quitter never wins and a winner never quits” — Napoleon Hill

3.1 ガベージコレクション##

ガベージコレクションは、実行中のプログラムで将来アクセスできなくなるデータオブジェクトを見つけ、それらのオブジェクトによって使用されるリソース(特にメモリ)を再利用するプロセスです。自動ガベージコレクション用の言語-Java、C#、Python、およびほとんどのスクリプト言語。 Cはガベージコレクションのない言語です。プログラマーは、いつメモリを割り当てて再利用するかを知る必要があります。

3.2 ディープコピーとシャローコピー##

前の記事を参照してください:[1年間Pythonを学び、今回はようやく浅いコピーと深いコピーを見つけました](https://links.jianshu.com/go?to=https%3A%2F%2Fyuzhoustayhungry.github.io%2Fpost%2F%25E6%25B7%25B1%25E6%258B%25B7%25E8%25B4%259D%25E5%2592%258C%25E6%25B5%2585%25E6%258B%25B7%25E8%25B4%259D%2F)

Q:浅いコピーと深いコピーの違いは何ですか?

回答:

3.3 イテレーターとジェネレーター##

Q:イテレーターとジェネレーターの違いは何ですか?

イテレーター: __iter __()および __next __()メソッドを実装するオブジェクト。最初のメソッドは、イテレーターオブジェクト自体を返し、forステートメントとinステートメントで使用されます。最初のメソッドは、反復で次の値を返します。要素がこれ以上ない場合、 StopIteration例外が発生します。

**ジェネレーター:**イテレーターを作成する簡単な方法は、キーワード yieldを使用します。ジェネレーターは、関数呼び出しスタックを使用して、イテレーターの状態を暗黙的に格納します。これにより、明示的なクラスと同じイテレーターを作成する場合に比べて、イテレーターの作成が簡単になります。また、読みやすさの向上にも役立ちます。

すべてのジェネレーターはイテレーターですが、その逆は正しくありません。特に、イテレーターは完全に成熟したクラスである可能性があるため、他の機能を提供できます。たとえば、上記の反復子クラスにメソッドを追加して反復制限を変更するのは簡単ですが、これはジェネレーターでは不可能です。

3.4 デコレーター@デコレーター###

@ シンボルはデコレータの構文上の砂糖であり、割り当て操作を再度回避するために関数を定義するときに使用されます。

import time

def time_function(f):
 def wrapper(*args,**kwargs):
  begin = time.time()
  result =f(*args,**kwargs)
  end = time.time()print("Function call with argument {all_args} took ".format(
   all_args="\t".join((str(args),str(kwargs))))+str(end - begin)+" seconds to execute.")return result

 return wrapper

3.5 List vs. tuple

Lists[1, 4, 7, "apple", 4], Tuple(3.14, "PI", 2,43, "e")

**同じポイント:**はコンテナであり、さまざまなタイプのデータを格納でき、アクセス用にインデックスを付けることができます a [i]

**違い:**タプルは不変であり、インデックス a [i]の値を変更したり、タプルから要素を追加/削除したりすることはできませんが、リストは変更できます。

不変性の利点:パフォーマンスの向上、コンテナの使いやすさ、スレッドの安全性。祖先はセット setに配置してキー値として使用できますが、リストはできません。タプルの作成とアクセス速度はわずかに速く、メモリフットプリントは小さいです。

3.6 * argsと* kwargs

どちらも、関数で変数パラメーターを渡すために使用されます。 * argは、可変長パラメーターリストを渡すために使用されます。

2番目のパラメーター ** kwargsは、可変数のキーワード引数を関数に渡すときに使用されます。

3.7 エラー処理、例外メカニズム##

3.8 lambda

increment_by_i =[lambda x: x + i for i inrange(10)]print(increment_by_i[3](4))

プログラムは、予想される7(= 3 + 4)の代わりに13(= 9 + 4)を出力します。これは、ループで作成された関数のスコープが同じであるためです。それらは同じ変数名を使用するため、すべて同じ変数* i *を参照します。これは、ループの最後では10であるため、13(= 9 + 4)になります。

目的の動作を実現する方法はたくさんあります。合理的な方法は、名前の競合を避けるために関数からラムダを返すことです。

3.9 関数パラメーター##

関数の位置パラメーター、キーワードパラメーター、およびデフォルトパラメーターは何ですか。

Recommended Posts

Pythonの高度な知識ポイント
Pythonの知識ポイント
Python3補足知識ポイント
2020--Python文法の一般的な知識のポイント
Python Advanced(1)
Pythonクローラーの基本的な知識ポイントの仕上げ
Pythonの解凍に関する知識ポイントの要約
pythonでのシェル実行の知識ポイント
Pythonの高度な使用法の概要
Pythonの基礎知識(1)
Python3.9の注目すべき更新ポイント
Pythonモジュールの知識の完全な分析