

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Python の例
<a name="examples-python"></a>

次のPython例は、Amazon Q Developer でインラインコード提案の生成を開始する方法を示しています。これらの例に示しているのは、独自のプロジェクトのコーディングアシスタントをトリガーする方法です。以下の例の大部分は、他の言語に適用されます。
+ [クラスと関数を生成する](#classes-python)
+ [ドキュメントコード](#code-python)
+ [アルゴリズムの生成](#algorithms-python)
+ [ユニットテストを生成する](#tests-python)

## クラスと関数を生成する
<a name="classes-python"></a>

 クラス全体または部分的な実装を生成するには、コードコメントを使用します。コメントは、 クラスの意図を記述します。シンプルに開始し、必要に応じて詳細を追加します。クラスを生成した後、スケルトン内で関数を引き続き生成できます。

コメントを作成するときは、言語のコメント構造を使用することをお勧めします。ではPython、1 行のコメントには `#`**を使用します*。 ***複数行のコメントの場合は、 `''' '''`または を使用します`""" """`。

入力

```
'''
DocumentReader class. has a name, children and optional parent. 
Includes I/O functions to read and
write document
'''
```

出力:

```
class DocumentReader:
    def __init__(self, name, children, parent=None):
        self.name = name
        self.parent = parent
        self.children = children
        
    def read(self):
        """Reads current document and returns text"""
        pass
    
    def write(self, text):
        """Writes text to current document"""
        pass
```

初期クラスができたので、追加のコメントを使用して追加の関数を生成できます。

入力

```
'''
function to read document from local directory path and print the first line of the document
'''
```

出力:

```
def read_document(self, path):
        """Reads document from path and prints first line"""
        import os
        if os.path.isfile(path):
            with open(path, 'r') as f:
                print(f.readline())
        else:
            print(f"File not found at {path}")
```

## ドキュメントコード
<a name="code-python"></a>

インラインドキュメントに依存することで、コードドキュメントの時間を短縮します。Python コメントブレーク を追加します`''' '''`。

入力

```
class S3Utils:
    '''
    <place cursor here>
    '''
    def __init__(self):
        self.base_url = "https://s3"

    def generate_s3_url(self, bucket_name, region):
        return f"{self.base_url}.{region}.amazonaws.com/{bucket_name}"

# Example usage:
if __name__ == "__main__":
    s3_util = S3Utils()
    bucket_name = "my-example-bucket"
    region = "us-west-1"
    s3_url = s3_util.generate_s3_url(bucket_name, region)
    print(f"S3 URL for bucket '{bucket_name}' in region '{region}': {s3_url}")
```

出力:

```
class S3Utils:
    '''
    Class to generate S3 URL from bucket name and region
    '''
    def __init__(self):
        self.base_url = "https://s3"

    def generate_s3_url(self, bucket_name, region):
        return f"{self.base_url}.{region}.amazonaws.com/{bucket_name}"

# Example usage:
if __name__ == "__main__":
    s3_util = S3Utils()
    bucket_name = "my-example-bucket"
    region = "us-west-1"
    s3_url = s3_util.generate_s3_url(bucket_name, region)
    print(f"S3 URL for bucket '{bucket_name}' in region '{region}': {s3_url}")
```

## アルゴリズムの生成
<a name="algorithms-python"></a>

Amazon Q Developer は、特に AWS SDKs に関連する一般的なアルゴリズムを生成できます。スクリプトで、必要な関数を指定するプロンプトを追加します。

この例では、値に名前を付けるユーザー ID キーのディクショナリを生成し、バブルソートアルゴリズムを使用してソート関数を生成する方法を示します。

入力

```
class SortList:
    @staticmethod
    def get_user_id_name_map():
        user_id_name_map = {
            1: "Amit",
            2: "Rahul",
            3: "Vijay",
            4: "Raj",
            5: "Kumar"
        }
        return user_id_name_map
    

    '''
    Sort the list of user id's alphabetically using bubble sort
    '''
```

出力:

```
    @staticmethod
    def sort_user_id_name_map():
        user_id_name_map = SortList.get_user_id_name_map()
        list_of_user_ids = list(user_id_name_map.keys())
        list_of_user_names = list(user_id_name_map.values())
        print("Before sort: ", list_of_user_ids)
        for i in range(len(list_of_user_ids)):
            for j in range(len(list_of_user_ids) - i - 1):
                if list_of_user_names[j] > list_of_user_names[j + 1]:
                    list_of_user_ids[j], list_of_user_ids[j + 1] = list_of_user_ids[j + 1], list_of_user_ids[j]
                    list_of_user_names[j], list_of_user_names[j + 1] = list_of_user_names[j + 1], list_of_user_names[j]
        print("After sort: ", list_of_user_ids)
```

さらに、標準手順のプロンプトを作成できます。この例では、ユーザーはディクショナリを Amazon DynamoDB テーブルに保存するためのプロンプトを作成します。スクリプトの先頭に、ユーザーは Amazon Q Developer に追加コンテキストを提供するのに役立つ DynamoDB ライブラリを追加するプロンプトを追加します。

入力

```
'''
Add libraries for Amazon Dynamo DB
'''
```

出力:

```
'''
Add libraries for Amazon Dynamo DB and JSON.

iMport necessary libraries for working with Amazon DynamoDB and JSON data.
'''

import boto3
import json
from botocore.exceptions import ClientError

def load_data_to_dynamodb(table_name, data_file):
    # Create a DynamoDB resource
    dynamodb = boto3.resource('dynamodb')

    # Get a reference to the table
    table = dynamodb.Table(table_name)

    # Load data from the JSON file
    with open(data_file, 'r') as file:
        data = json.load(file)

    # Iterate over the data and load it to the table
    for item in data:
        try:
            table.put_item(Item=item)
            print(f"Successfully loaded data: {item}")
        except ClientError as e:
            print(f"Error loading data: {e.response['Error']['Message']}")

# Example usage
load_data_to_dynamodb('myTable', 'data.json')
```

これで、ユーザーは DynamoDB にディクショナリを保存するのに役立つように Amazon Q に簡単に依頼できるようになりました。

入力

```
'''
   function to store the above sorted dict to dynamodb table named users    
'''
```

出力:

```
@staticmethod
    def store_user_id_name_map_in_dynamodb():
        user_id_name_map = SortList.get_user_id_name_map()
        list_of_user_ids = list(user_id_name_map.keys())
        list_of_user_names = list(user_id_name_map.values())
        dynamodb = boto3.resource('dynamodb')
        table = dynamodb.Table('users')
        for i in range(len(list_of_user_ids)):
            try:
                response = table.put_item(
                    Item={
                        'user_id': list_of_user_ids[i],
                        'user_name': list_of_user_names[i]
                    }
                )
            except ClientError as e:
                print(e.response['Error']['Message'])
```

## ユニットテストを生成する
<a name="tests-python"></a>

インラインコメントを使用すると、Amazon Q Developer はアサーションやその他のテストを実行するためのユニットテストを生成できます。この例では、ユーザーは Amazon Q にユニットテスト用の適切なライブラリを生成して、テストスクリプトのコンテキストを設定するよう求めます。次に、ユーザーは Amazon Q に`sort_user_id_name_map`関数のテスト関数を記述するように要求します。

入力

```
'''
Import all the required unit test libraries for python and then generate a unit test for sort_user_id_name_map function.
'''
```

出力:

```
import unittest
from unittest.mock import patch
from sort_user_id_name_map import sort_user_id_name_map

class TestSortUserIdNameMap(unittest.TestCase):
    @patch('sort_user_id_name_map.sort_user_id_name_map')
    def test_sort_user_id_name_map(self, mock_sort):
        mock_sort.return_value = {'id1': 'name1', 'id2': 'name2'}
        result = sort_user_id_name_map({'id2': 'name2', 'id1': 'name1'})
        self.assertEqual(result, {'id1': 'name1', 'id2': 'name2'})

if __name__ == '__main__':
    unittest.main()
```

さらに、ユーザーと Amazon Q Developer の間のチャットでは、ユーザーのコード入力プロンプトに基づいてユニットテストを提案して生成します。詳細については、[「チャットの例](examples-chat.md)」を参照してください。