ChatGPTを試してみた。
日本語でも対応してることにびっくり。
僕「Pythonエンジニアが知っておくと便利な裏技を10個教えて」
以下、ChatGPT氏の回答
※記入が途中で止まった場合は「続けて」を入力。今回の10項目出力に「続けて」は3回打ち込んだ。
Pythonでは、文字列やリストなどのシーケンス型を逆順に並べるには、内置関数のreversed()を使うことができます。例えば、以下のように使用します。
文字列を逆順に並べる
string = "Hello, world!"
reversed_string = "".join(reversed(string))
print(reversed_string) # 結果: !dlrow ,olleH
リストを逆順に並べる
numbers = [1, 2, 3, 4, 5]
reversed_numbers = list(reversed(numbers))
print(reversed_numbers) # 結果: [5, 4, 3, 2, 1]
Pythonでは、変数の値を入れ替えることができます。例えば、以下のように使用します。
変数の値を入れ替える
a = 10
b = 20
変数aと変数bの値を入れ替える
a, b = b, a
print(a) # 結果: 20
print(b) # 結果: 10
Pythonでは、with文を使用すると、ファイルやコネクションなどのリソースを使用する際に、自動的にクリーンアップ処理を行うことができます。例えば、以下のように使用します。
ファイルを開く
with open("test.txt", "w") as f:
# ファイルに書き込む
f.write("Hello, world!")
with文を抜けると、自動的にファイルが閉じられる
Pythonでは、enumerate()関数を使用すると、シーケンス型のデータに対して、要素の番号と値を同時に取得することができます。例えば、以下のように使用します。
リストから要素と番号を同時に取得する
for i, item in enumerate(["apple", "banana", "orange"]):
Pythonでは、zip()関数を使用すると、複数のシーケンス型のデータを同時に反復処理することができます。例えば、以下のように使用します。
複数のシーケンスを同時に反復処理する
for item1, item2 in zip(["apple", "banana", "orange"], [1, 2, 3]):
print(item1, item2)
結果:
apple 1
banana 2
orange 3
Pythonでは、defaultdictというクラスを使用すると、辞書型のデータを作成する際に、存在しないキーに対してもデフォルト値を返すことができます。例えば、以下のように使用します。
defaultdictを使用する
from collections import defaultdict
辞書型を作成する
d = defaultdict(int)
存在しないキーを参照する
print(d["key"]) # 結果: 0
存在するキーを参
Pythonでは、functools.partial()関数を使用すると、既存の関数を部分的に適用することができます。例えば、以下のように使用します。
from functools import partial
関数を定義する
def add(x, y, z):
return x + y + z
関数を部分的に適用する
add_10 = partial(add, 10)
関数を実行する
result = add_10(20, 30)
print(result) # 結果: 60
Pythonでは、itertoolsモジュールには、多くの便利なイテレータ操作を行うための関数が定義されています。例えば、以下のように使用します。
from itertools import groupby
リストを作成する
numbers = [1, 1, 2, 3, 3, 3, 4, 5, 5]
同じ値を持つ要素をまとめて反復処理する
for key, group in groupby(numbers):
print(key, list(group))
結果:
1 [1, 1]
2 [2]
3 [3, 3, 3]
4 [4]
5 [5, 5]
Pythonでは、デコレータを使用すると、既存の関数に別の機能を追加することができます。例えば、以下のように使用します。
Copy code
デコレータを定義する
def my_decorator(func):
def wrapper():
print("Before function")
func()
print("After function")
return wrapper
デコレータを適用する
@my_decorator
def hello():
print("Hello, world!")
関数を実行する
hello()
結果:
Before function
Hello, world!
After function
Pythonでは、functools.lru_cacheデコレータを使用すると、関数の呼び出し結果をキャッシュすることができます。これにより、再度同じ引数で関
を呼び出した際に、高速に結果を返すことができます。例えば、以下のように使用します。
from functools import lru_cache
関数を定義する
@lru_cache()
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
関数を実行する
print(fibonacci(10)) # 結果: 55
また、lru_cacheデコレータは、キャッシュの最大サイズを指定することができます。例えば、以下のように使用します。
関数を定義する
@lru_cache(maxsize=128)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
関数を実行する
print(fibonacci(10)) # 結果: 55
上記のように、Pythonには様々な便利な裏技があります。学習を進める中で、そのような技術を積極的に取り入れることで、Pythonプログラミングのスキルを磨くことができます。
ここまで。
上記文章で、僕の方で手を入れたのは
(1)貼り付けるとついてくる、Copy codeを何か所か削除した。
(2) マークダウンの「#」を「#####」に置換した。
という2点のみで、時間としては7分程度。
手作業でやってしまったが、一括置換をすればもっと秒殺だったな…。
まだ見やすい形になっていないので、次はその点も改善できるか試してみよう。