なんだかGoodVibes

日々の勉強メモです。

【Python】printとpprint

こんにちは。
本日はPythonメモです。

概要

本記事は、標準的なprint()と
pprintモジュールを使用したpprint()について記載記載します。

pprintについては以下参照です。

pprint --- データ出力の整然化 — Python 3.12.2 ドキュメント


printを使用してデータを出力

変数の出力
s = 'Hello World'
print(s)

n = 1000
print(n)

l = [1, 2, 3, 4, 5]
print(l)

d = {'a': 'aaa', 'b': 'bbb'}
print(d)

実行結果は以下です。

Hello World
1000
[1, 2, 3, 4, 5]
1 2 3 4 5
{'a': 'aaa', 'b': 'bbb'}
改行の設定

引数のendを指定することで改行の変更ができます。
デフォルトは\nとなっています。

print('Hello', end='')
print('World')

print('Hello', end='---')
print('World')

実行結果は以下です。

HelloWorld
Hello---World
区切り文字の設定

引数のsepを指定することで改行の変更ができます。
デフォルトは空白スペースとなっています。

print('Hello', 'World', sep='-->')
print('Hello', 'World', sep='\n')

実行結果は以下です。

Hello-->World
Hello
World

リスト出力の場合、変数名に*を付与すると
区切り文字が空白スペースになります。

l = [1, 2, 3, 4, 5]
print(*l)

実行結果は以下です。

1 2 3 4 5

さらにsepを指定すると
同様に区切り文字を変更できます。

l = [1, 2, 3, 4, 5]
print(*l, sep='--')

実行結果は以下です。

1--2--3--4--5
変数の埋め込む
format()メソッド

変数を設定する部分を{}で記載します。
format()の引数は、表示する対象の変数を指定します。

name = 'Bob'
color = 'yellow'
print('name={}, color={}'.format(name, color))

実行結果は以下です。

name=Bob, color=yellow

{}にキーワードを指定することも可能です。

name = 'Bob'
color = 'yellow'
print('name={n}, color={c}'.format(c=color, n=name))

実行結果は以下です。

name=Bob, color=yellow
フォーマット文字列

文字列リテラルの前にfを付与します。
{}に直接変数を指定することができます。

name = 'Bob'
color = 'yellow'
print(f'name={name}, color={color}')

実行結果は以下です。

name=Bob, color=yellow


pprintを使用してデータを出力

pprintを使用する際は、pprintをインポートしてください。

pprintを使用すると、出力するデータを設定に応じて整形してくれます。

import pprint
item = [{'a1': 'aa1', 'a2': 'aa2', 'a3': [100, 200]},
        {'b1': 'bb1', 'b2': 'bb2', 'b3': [300, 400]},
        {'c1': 'cc1', 'c2': 'cc2', 'c3': [500, 600]}]
pprint.pprint(item)

実行結果は以下です。

[{'a1': 'aa1', 'a2': 'aa2', 'a3': [100, 200]},
 {'b1': 'bb1', 'b2': 'bb2', 'b3': [300, 400]},
 {'c1': 'cc1', 'c2': 'cc2', 'c3': [500, 600]}]

デフォルトがwidth=80となっているので
要素が少ない場合や、短い場合は整形されません。

import pprint
item = [{'a1': 'aa', 'a2': 'aa'},
        {'b1': 'bb', 'b2': 'bb'},
        {'c1': 'cc', 'c2': 'cc'}]
pprint.pprint(item)

実行結果は以下です。

[{'a1': 'aa', 'a2': 'aa'}, {'b1': 'bb', 'b2': 'bb'}, {'c1': 'cc', 'c2': 'cc'}]

widthの設定を変更してみます。

import pprint
item = [{'a1': 'aa1', 'a2': 'aa2', 'a3': [100, 200]},
        {'b1': 'bb1', 'b2': 'bb2', 'b3': [300, 400]},
        {'c1': 'cc1', 'c2': 'cc2', 'c3': [500, 600]}]

pp = pprint.PrettyPrinter(width=30)
pp.pprint(item)

実行結果は以下です。

[{'a1': 'aa1',
  'a2': 'aa2',
  'a3': [100, 200]},
 {'b1': 'bb1',
  'b2': 'bb2',
  'b3': [300, 400]},
 {'c1': 'cc1',
  'c2': 'cc2',
  'c3': [500, 600]}]

要素の深さをdepthで変更できます。
デフォルトはdepth=Noneです。

import pprint
item = [{'a1': 'aa1', 'a2': 'aa2', 'a3': [100, 200]},
        {'b1': 'bb1', 'b2': 'bb2', 'b3': [300, 400]},
        {'c1': 'cc1', 'c2': 'cc2', 'c3': [500, 600]}]

pp = pprint.PrettyPrinter(depth=2)
pp.pprint(item)

実行結果は以下です。

[{'a1': 'aa1', 'a2': 'aa2', 'a3': [...]},
 {'b1': 'bb1', 'b2': 'bb2', 'b3': [...]},
 {'c1': 'cc1', 'c2': 'cc2', 'c3': [...]}]



以上です。

【JavaScript】JSON形式の文字列とオブジェクト間の変換

こんにちは。
本日はJavaScriptメモです。

JSON形式の文字列をオブジェクトに変換

JSON形式の文字列をオブジェクトに変換するにはJSON.parse()を使用します。
引数に、変換したいJSON文字列を指定します。

let json = '{"id": 1, "name": "bob", "color": ["yellow", "red"]}'
let obj= JSON.parse(json)
console.log(`id = ${obj.id} (${typeof obj.id})`)
console.log(`name = ${obj.name} (${typeof obj.name})`)
console.log(`color = ${obj.color} (${typeof obj.color})`)

実行結果は以下です。

id = 1 (number)
name = bob (string)
color = yellow,red (object)


オブジェクトをJSON形式の文字列に変換する

オブジェクトをJSON形式の文字列に変換するにはJSON.stringify()を使用します。
引数に、変換したいJSON文字列を指定します。

let obj = {
    id: 1,
    name: 'bob',
    color: ['yellow', 'red']
}

let json = JSON.stringify(obj)
console.log(json)

実行結果は以下です。

{"id":1,"name":"bob","color":["yellow","red"]}


第2引数には、変換用の関数やプロパティ名の配列を指定できます。
特定のkeyを除外する関数を指定してみます。

let obj = {
    id: 1,
    name: 'bob',
    color: ['yellow', 'red']
}

let replacer = (k, v) => {
    if (k === 'color') {
        return undefined
    }

    return v;
}

let json = JSON.stringify(obj, replacer)
console.log(json)

実行結果は以下です。

{"id":1,"name":"bob"}


第3引数には、インデントを指定します。
数値を指定した場合、インデントとして使用する空白の数を意味します。

let obj = {
    id: 1,
    name: 'bob',
    color: ['yellow', 'red']
}

let json = JSON.stringify(obj, null, '\t')
console.log(json)

実行結果は以下です。

{
        "id": 1,
        "name": "bob",
        "color": [
                "yellow",
                "red"
        ]
}



以上です。

【Python】関数の定義に関するいろいろ

こんにちは。
本日はPythonメモです。

概要

以前、関数の定義について以下の記事を記載しました。

【Python】関数を定義してみる - なんだかGoodVibes

関数の定義を行う際、
他にもいろいろなことができるので
本記事では関数定義でできることについて記載したいと思います。


位置引数

呼び出し側で指定した引数の値が
先頭から順に対応する位置の仮引数に代入されます。
これを位置引数と言います。

def my_print(level, title, message):
    print('level = ' + level)
    print('title = ' + title)
    print('message = ' + message)

my_print('Info', 'Greeting', 'Hello Bob!')

実行結果は以下です。

level = Info
title = Greeting
message = Hello Bob!


キーワード引数

仮引数の名前を指定して実引数を指定する方法をキーワード引数といいます。
この場合、引数の順番は異なっていても問題ありません。

def my_print(level, title, message):
    print('level = ' + level)
    print('title = ' + title)
    print('message = ' + message)

my_print(message='Hello Bob!', level='Info', title='Greeting')

実行結果は以下です。

level = Info
title = Greeting
message = Hello Bob!


デフォルト引数

関数内で使用するデフォルトの値を設定します。
デフォルト引数を指定する場合、
デフォルト値を指定していない引数の前でデフォルト値を設定するとエラーになるので注意です。

def my_print_default(level, title, message='Hello Bob!'):
    print('level = ' + level)
    print('title = ' + title)
    print('message = ' + message)

my_print_default(level='Info', title='Greeting')

実行結果は以下です。

level = Info
title = Greeting
message = Hello Bob!


可変個数の引数を設定する

引数の前に「*」をつけることで
その引数はタプルとして可変個数受け取ることができます。

def my_print_tuple(name, *tuple):
    print(name + ':', tuple)

my_print_tuple('color', 'red', 'blue', 'black')

実行結果は以下です。

color: ('red', 'blue', 'black')


引数を辞書として受け取る

引数の定義に「**」を使用すると、引数を1個の辞書として受け取ります。
引数の名前が辞書のキー、引数の値が辞書の値となります。

def my_print_dic(**dic):
    print(dic)

my_print_dic(red='Apple', green='Melon', yellow='Lemon')

実行結果は以下です。

{'red': 'Apple', 'green': 'Melon', 'yellow': 'Lemon'}


関数内関数

名前の通り、関数内に定義する関数のことです。

def my_calculate(num1, num2):
    def inner(n1, n2):
        return n1 + n2
    print(inner(num1, num2))

my_calculate(1, 2)

実行結果は以下です。

3

関数内関数は、クロージャとして機能します。
クロージャとは、関数の外側の変数を記憶することができる関数のことです。
以下のサンプルでは、create_messageによって
greetingの値を記憶したinnerが生成されます。

def create_message(greeting):
    def inner():
        return "Bob said. '%s'" % greeting
    return inner

m1 = create_message('Hello.')
m2 = create_message('How Are You.')

print(m1())
print(m2())

m1m2はそれぞれ自分が生成されたときに使われていた
greetingの値を記憶しています。

実行結果は以下です。

Bob said. 'Hello.'
Bob said. 'How Are You.'



以上です。