Python3〜関数の引数のいろんな書き方や展開

スポンサーリンク

Pythonは、バイオインフォマティクスの分野で広く活用される強力なプログラミング言語です。特にデータ解析やシミュレーションにおいて、柔軟なコードを書けるスキルは重要です。その基盤となるのが「ユーザー定義関数」です。本記事では、Pythonのユーザー定義関数における引数の基本的な書き方から応用までを解説します。


ユーザー定義関数の基本

Pythonでは、defキーワードを使って関数を定義します。関数に引数を与えることで、柔軟性を持たせることが可能です。例を見てみましょう。

def greet(name):
    print(f"Hello, {name}!")

この関数はnameという引数を取り、名前に基づいた挨拶を表示します。


引数の種類

1. 位置引数

位置引数は、関数の呼び出し時に引数の順番が重要なものです。上記のgreet関数のように、呼び出し時に渡す引数の順序がそのまま関数内で使われます。

greet("Alice")  # Hello, Alice!

2. 既定値引数(デフォルト引数)

既定値引数を使用すると、引数が渡されなかった場合にデフォルト値を適用できます。これにより、コードが簡潔になります。

def greet(name="Guest"):
    print(f"Hello, {name}!")
    
greet()  # Hello, Guest!
greet("Alice")  # Hello, Alice!

キーワード引数

関数を呼び出すときに、引数の順番に依存せず、引数名を指定して値を渡すことができます。

def introduce(name, age):
    print(f"My name is {name}, and I am {age} years old.")
    
introduce(age=25, name="Bob")  # 順番を変えてもOK

キーワード引数はコードの可読性を向上させます。


可変長引数

1. タプル型で受け取る(*args)

引数の数が不明な場合、可変長引数*argsを使います。これにより、任意の数の引数をタプルとして受け取ることができます。

def sum_numbers(*args):
    return sum(args)
    
print(sum_numbers(1, 2, 3))  # 6
print(sum_numbers(10, 20, 30, 40))  # 100

バイオインフォマティクスでは、例えば複数の配列データを解析する際に役立ちます。

2. 辞書型で受け取る(**kwargs)

キーワード付き引数を任意の数だけ受け取る場合は、**kwargsを使います。これにより、引数が辞書型で渡されます。

def display_metadata(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
        
display_metadata(species="Homo sapiens", gene="BRCA1", sequence_length=25000)

アスタリスクによる引数の展開

アスタリスク(*)やダブルアスタリスク(**)を使うと、既存のリストや辞書を関数の引数として展開できます。

リストの展開

def calculate_area(length, width):
    return length * width

dimensions = [5, 10]
print(calculate_area(*dimensions))  # 50

辞書の展開

def describe_sample(species, gene, length):
    print(f"Species: {species}, Gene: {gene}, Length: {length}")

metadata = {"species": "Homo sapiens", "gene": "BRCA1", "length": 25000}
describe_sample(**metadata)

応用例:バイオインフォマティクスの実践

次に、これらの知識を活用してバイオインフォマティクスで役立つスクリプトを構築してみましょう。

配列のGC含量を計算する関数

DNA配列のGC含量(GとCの割合)を計算する関数を作成します。

def calculate_gc_content(sequence, round_digits=2):
    """
    DNA配列のGC含量を計算する
    :param sequence: DNA配列(文字列)
    :param round_digits: 小数点以下の丸め桁数(デフォルトは2)
    :return: GC含量(パーセンテージ)
    """
    gc_count = sequence.count("G") + sequence.count("C")
    gc_content = (gc_count / len(sequence)) * 100
    return round(gc_content, round_digits)

# 使用例
sequence = "ATGCGCGATCGTACG"
gc_content = calculate_gc_content(sequence, round_digits=3)
print(f"GC Content: {gc_content}%")

動的な解析パイプライン

以下のコードは、複数の配列に対して一括でGC含量を計算するパイプラインです。

def batch_gc_analysis(*sequences, round_digits=2):
    results = []
    for seq in sequences:
        gc = calculate_gc_content(seq, round_digits=round_digits)
        results.append(gc)
    return results

# 配列を一括解析
sequences = ["ATGCGC", "GGCCAA", "TTATTAGGCC"]
gc_results = batch_gc_analysis(*sequences)
print(gc_results)  # [66.67, 66.67, 44.44]

まとめ

Pythonのユーザー定義関数では、以下の引数の使い方をマスターすることが重要です。

  1. 位置引数キーワード引数で基本的な関数を設計
  2. 既定値引数でデフォルト動作を定義
  3. 可変長引数で柔軟性を追加
  4. アスタリスク展開でリストや辞書を効率的に処理

これらを活用することで、バイオインフォマティクスの解析スクリプトを効率的に構築できます。Pythonを使いこなして、さらに高度なデータ解析やシミュレーションを実現しましょう!

タイトルとURLをコピーしました