1.Pythonバージョン
皆さんにお知らせしたいと思います。2020年1月1日以降、PythonはPython2を正式にサポートしなくなりました。この記事の例の多くは、Python3でのみ実行できます。まだPython2.7を使用している場合は、今すぐアップグレードしてください。
2.Pythonの最小バージョンを確認します
コード内のPythonのバージョンをチェックして、ユーザーが互換性のないバージョンでスクリプトを実行していないことを確認できます。チェック方法は以下のとおりです。
if not sys.version_info > (2, 7):
#. berate your user for running a 10 year
#. python version
elif not sys.version_info >= (3, 5):
#. Kindly tell your user (s)he needs to upgrade
#. because you're using 3.5 features
3. IPython
IPythonは本質的に拡張シェルです。自動補完のためだけに試してみる価値があります。その機能はそれだけではありません。また、次のような、私が書き留めることができない多くのコマンドがあります。
-
%cd:現在の作業ディレクトリを変更します
-
%edit:エディターを開き、エディターを閉じた後、入力したコードを実行します
-
%env:現在の環境変数を表示します
-
%pip install [pkgs]:インタラクティブシェルを離れることなくソフトウェアパッケージをインストールできます
-
%timeおよび%timeit:Pythonコードを実行する時間を測定します
コマンドの完全なリストについては、ここをクリックして表示してください(https://ipython.readthedocs.io/en/stable/interactive/magics.html)。
非常に便利な機能もあります。前のコマンドの出力を参照してください。InとOutは実際のオブジェクトです。3番目のコマンドの出力はOut [3]の形式で使用できます。
IPythonのインストールコマンドは次のとおりです。
pip3 install ipython
4.リスト内包
リスト内包表記を使用すると、リストを埋めるための面倒なループの使用を回避できます。リスト内包表記の基本的な構文は次のとおりです。
[ expression for item in list if conditional ]
基本的な例を挙げます。リストに注文番号のセットを入力します。
mylist = [i for i in range(10)]
print(mylist)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
式を使用できるため、いくつかの算術演算も実行できます。
squares = [x**2 for x in range(10)]
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
外部関数を呼び出すこともできます。
def some_function(a):
return (a + 5) / 2
my_formula = [some_function(i) for i in range(10)]
print(my_formula)
# [2, 3, 3, 4, 4, 5, 5, 6, 6, 7]
最後に、「if」を使用してリストをフィルタリングすることもできます。次の例では、2で割り切れる数のみを保持します。
filtered = [i for i in range(20) if i%2==0]
print(filtered)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
5.オブジェクトのメモリ使用量を確認します
sys.getsizeof()を使用して、オブジェクトのメモリ使用量を確認できます。
import sys
mylist = range(0, 10000)
print(sys.getsizeof(mylist))
# 48
待ってください、なぜこの巨大なリストには48バイトしか含まれていないのですか?
ここでの範囲関数はクラスを返しますが、リストのように動作するためです。メモリ使用量に関しては、範囲は実際の数値リストよりもはるかに効率的です。
リスト内包表記を使用して、同じ範囲の数値のリストを作成することができます。
import sys
myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist))
# 87632
6.複数の値を返します
Pythonの関数は、辞書、リスト、またはクラスを使用せずに複数の変数を返すことができます。次のように:
def get_user(id):
# fetch user from database
# ....
return name, birthdate
name、birthdate = get_user(4)
戻り値の数が制限されている場合は、もちろん問題ありません。ただし、戻り値の数が3を超える場合は、戻り値を(データ)クラスに配置する必要があります。
7.データクラスを使用する
Pythonは、バージョン3.7以降にデータクラスを提供しています。通常のクラスや他のメソッド(複数の値や辞書を返すなど)と比較して、データクラスにはいくつかの明らかな利点があります:
データ型のコードが少ない
データクラスはeqメソッドを提供するため、データクラスを比較できます
データクラスはreprメソッドも提供するため、デバッグ時にデータクラスを簡単に出力できます。
データ型には型のヒントが必要なので、バグの可能性を減らすことができます
データクラスの例は次のとおりです。
from dataclasses import dataclass
@dataclass
class Card:
rank: str
suit: str
card = Card("Q", "hearts")
print(card == card)
# True
print(card.rank)
# 'Q'
print(card)
Card(rank='Q', suit='hearts')
詳細な使用ガイドについては、ここをクリックしてください(https://realpython.com/python-data-classes/)。
8.変数を交換します
次のヒントは非常に賢く、複数行のコードを節約できます。
a = 1
b = 2
a, b = b, a
print (a)
# 2
print (b)
# 1
9.辞書のマージ(Python 3.5以降)
Python 3.5以降、辞書をマージする操作が簡単になりました。
dict1 = {
'a': 1, 'b': 2 }
dict2 = {
'b': 3, 'c': 4 }
merged = {
**dict1, **dict2}
print (merged)
# {'a': 1, 'b': 3, 'c': 4}
キーが繰り返されると、最初の辞書のキーが上書きされます。
10.文字列の最初の文字を大文字にします
次のテクニックは本当に少しかわいいです:
mystring = "10 awesome python tricks"
print(mystring.title())
'10 Awesome Python Tricks'