# 決算整理3/3_1(簿記の学習_14)

簿記3級を学んでいこうという連載の14回目です。前回の記事はこちらになります。

hirocom777.hatenadiary.org

この連載ではふくしままさゆき先生の動画を使って簿記3級の勉強をしていきます。

前回は「決算整理」の3回目でした。「貸倒引当金の設定」について学びました。

今回は「決算整理」の4回目です。以下の動画で学んでいきたいと思います。

www.youtube.com

この動画では以下の2点について説明されています。

  • 商品売上原価の算定(三分法の決算整理仕訳)
  • 利益の会計処理

ここではこのうち、「商品売上原価の算定」について学びます。

商品売上原価の算定

以下に損益計算書の例を提示します。

収益から費用を引いた結果が当期純利益になります。それでは、どうして商品売上原価の算定が必要なのでしょうか。この内容は「商品売買での利益」と、「その他の取引で得た利益」に分けられます。

商品売買での利益ですが、ここで「売上高」は売った商品の売価の合計になります。「売上原価」は売った商品の原価の合計です。売上高から売上原価を引いたものが「売上総利益」になります。

次に、その他の取引で得た利益ですが「その他の収益」と「その他の費用」を合算して算出します。

商品売買での利益と、その他の取引で得た利益を合計した結果が「当期純利益」になります。

これらの勘定科目ですが、その他の取引で得た利益については記載されている内容そのままです。商品売買での利益の利益についてはどうでしょうか。これは分記法と三分法で異なります。

  • 分記法の場合
    分記法の場合は簡単です。期中の仕訳で「商品売買益」の勘定科目で出ています。この科目の合計が売上総利益になります。

  • 三分法の場合
    三分法の場合、売上高の勘定科目は「売上」になります。それでは売上原価はどうなるのでしょうか。基本「仕入」が該当するのですが、修正が必要です。仕入」は当期仕入れた分の金額が該当します。当期売れた分の金額ではありません。期首に前期の在庫が残っていることもあるし、期末に在庫が残る場合もあります。そこで仕入をベースにして修正する必要があります。

しーくりくりしー

三分法で売上原価を求める手順は、以下になります。

  1. 期首の在庫を繰越商品勘定から除いて、仕入勘定にする
  2. 期末の在庫を仕入勘定から除いて、繰越商品勘定にする

の手順で仕分けを行います。たとえば、当期末商品の棚卸高が200万円、前期末(当期首)商品の棚卸高が100万円の場合は

(借)仕入 1,000,000(貸)繰越商品 1,000,000
(借)繰越商品 2,000,000(貸)仕入 2,000,000

となります。繰越商品は資産の勘定科目です。「簿記の入門2(簿記の学習03)」で出てきました。この時、この勘定科目は普段使わないと説明しました。決算整理で商品売上原価の算定を行うときに使うんですね。「仕入、繰越勘定、繰越勘定、仕入」の順になるので「しーくりくりしー」と言ったりします。

仕訳の理由

では、どうしてこのような仕訳を行うのでしょうか。売上原価とは、売れた商品の仕入です。

たとえば、期中に100円で3個仕入れた商品が、同じく期中に3個とも120円で売れた場合、売上原価は300円になります。

それでは同じ商品を期中に100円で4個仕入れて、期中に3個売れた(1個は売れ残った)場合の売上原価はいくらでしょうか。こちらの売上原価は300円になります。売上原価は以下の式で表されます。

当期仕入れ4個 - 当期販売3個 = 期末1個

この式を整理すると

当期仕入れ4個 - 期末1個 = 当期販売3個

となり、売上原価はこれに仕入値を掛けた300円になります。それでは次の場合どうでしょう。

同じ商品の期首在庫が1個ありました。期中に4個仕入れてトータル5個となり、そこから期中に3個売れた(1個は売れ残った)場合の売上原価です。この場合も300円になります。この場合の式は、

期首1個 + 当期仕入れ4個 - 当期販売3個 = 期末2個

となり、この式を整理すると

期首1個 + 当期仕入れ4個 - 期末2個 = 当期販売3個

となります。つまり売上原価は期首在庫に当期の仕入れ数を足して、期末在庫を足したものなのです。

仕入勘定について

上記のやり取りを仕入に関してみてみましょう。以下の形を「Tフォーム」または「T字勘定」と呼びます。

決算になった時点で、仕入の勘定は借方に400円になっています。この時の状態は、

(借)仕入(当期仕入れ) 400(貸)なし

次に期首の在庫を繰越勘定から除いて、仕入にする処理をします(「しーくり」)。すると以下の状態になります。

(借)仕入(当期仕入れ) 400(貸)なし
(借)仕入(期首) 100

さらに期末の在庫を仕入から除いて、繰越勘定にする処理をします(「くりしー」)。すると以下の状態になります。

(借)仕入(当期仕入れ) 400(貸)仕入(期末) 200
(借)仕入(期首) 100

借方と貸方の差額が当期販売(売上原価)300円になります。

繰越商品勘定について

繰越商品勘定について見てみましょう。まずは1年目の決算時です。1年目ですので期首の在庫はありません。期中に1個仕入れたとします。仕入値は100円とします。「しーくりくりしー」を行うと、以下のようになります。

(借)仕入      0(貸)繰越商品 0
(借)繰越商品  100(貸)仕入  100

次に2年目の決算時です。期首在庫は1個、期末在庫は2個だったとすると仕訳は、

(借)仕入    100(貸)繰越商品 100
(借)繰越商品  200(貸)仕入    200

となります。以下は補足です。

仕入は費用の勘定科目で、損益計算書(P/L)に記載されます。前期末の損益計算書の残高は当期首時点で0クリアされます。流れていくので「フローの概念」と言ったりします。
これに対して繰越商品など、貸借対照表(B/S)に記載される内容は、前期末の内容が当期首にそのまま引き継がれます。積み重なっていくので「ストックの概念」といいます。

次回は利益の会計処理

いかがでしょうか。これで決算整理仕訳で行う処理のほとんどが終わりました。次回は利益の会計処理です。お楽しみに!!

簿記3級_学習記録のまとめはこちら

モジュール_2(Python_18)

この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、モジュールにいて学びました。Pythonはプログラムでよく使うコードを部品にできます。

今回もモジュールです。便利な読み込み方を学びます。

モジュール名を変える

モジュールを呼び出す際に、名前を変えてインポートする方法があります。モジュール名が長かった場合など、省略した名前に変えることでコードが読みやすくなる場合があります。

import モジュール名 as 別名 

以下は、モジュールを別名で呼び出した例です。フォルダーの中に、ファイル「mod_1.py」を作成します。内容は以下の通りです。

#mod_1.py
def calc_area(x, y):
    return x * y

このモジュールは以下のように呼び出せます。

#m_test01.py
import mod_1 as m

height, width = 3, 5
print(m.calc_area(height, width)) # 15が返ってくる

「mod_1」の記述を「m」に短縮して呼び出すことができました。

モジュールから直接読み込む

モジュールを呼び出す際に、モジュール名を省略して呼び出せる方法があります。

from モジュール名 import 識別子 

識別子には関数名、変数名、クラス名などが入ります。この様に記述すると、識別子で指定した名前のみで呼び出すことができます。

上記ファイル「mod_1.py」を以下のように呼び出すことができます。ファイル「m_test02.py」を以下の内容でm_test01.pyと同じ場所においてください。

#m_test02.py
from  mod_1 import calc_area

height, width = 3, 5
print(calc_area(height, width)) # 15が返ってくる

「mod_1.」の記述を省略して呼び出すことができました。

パッケージを作る

パッケージとは、複数のPythonファイルをまとめたフォルダーです。パッケージをインポートすることで、パッケージ直下の複数のPythonファイルをモジュールとして使用できます。パッケージの作成手順は以下の通りです。

  1. フォルダーを作成する
  2. フォルダーに「init.py」というファイルを置く
  3. フォルダーにモジュールファイルを作成して置く

init.pyにはモジュールの初期化・実行のコードを書けますが、現段階では空のままで良いです。

パッケージの作成例を見てみましょう。まず上記と同じ場所にpackageというフォルダーを作成して、中に空のファイル「init.py」と、「mod_2.py」、「mod_3.py」を配置します。内容は以下の通りです。

#mod_2.py
def calc_trangle(x, y):
    return x * y / 2
#mod_3.py
def calc_circle(x):
    return x * x * 3.14

次にm_test01.pyと同じ場所に、ファイル「m_test03.py」を配置します。ここまでのファイル配置は以下のようになります。

Folder
  │  m_test01.py
  │  m_test02.py
  │  m_test03.py
  │  mod_1.py
  │
  └─package
        __init__.py
        mod_2.py
        mod_3.py

m_test03.pyの内容を以下のようにして、実行してみましょう。

#m_test03.py
import package.mod_2

height, width = 3, 5
print(package.mod_2.calc_trangle(height, width)) # 7.5が返ってくる

import package.mod_3

radius = 3
print(package.mod_3.calc_circle(radius)) # 28.26が返ってくる

三角形と円の面積計算ができました。

モジュール、パッケージの配置場所

モジュールが増えてくると、モジュールがどこから呼び出されているかを確認したいことがあります。 m_test01.pyと同じ場所に、以下の内容でファイル「m_test04.py」を配置して実行してみましょう。

#m_test04.py
import mod_1
import package.mod_2

print(mod_1.__file__)
# Folder\Python_Work\mod_1.py を返す
print(package.__file__)
# Folder\Python_Work\package\__init__.py を返す
print(package.mod_2.__file__)
# Folder\Python_Work\package\mod_2.py を返す

各モジュールの配置場所が明確になりました。 「file」は、「name」とおなじ、特殊属性を表す変数です。指定したモジュールのフルパスファイル名(パッケージの場合は、直下の「init.py」のフルパスファイル名)を表します。

次回は日付と時間

いかがでしょうか。プログラミングでよく使うコードは、モジュール化しておくと便利ですね。次回は日付と時間です。プログラミングでは、押さえておかなければならないポイントです。お楽しみに!!

Python再学習のまとめはこちら!!

モジュール_1(Python_17)

この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、関数の記述方法と注意する点について紹介しました。Pythonの関数の性質がわかってきたと思います。

今回はモジュールです。Pythonはプログラムでよく使うコードを部品にできます。

モジュールの呼び出し

フォルダーの中に、ファイル「mod_1.py」を作成します。内容は以下の通りです。

#mod_1.py
def calc_area(x, y):
    return x * y

四角形の面積を求める関数「calc_area」が記述されています。次に同じフォルダー内に以下のファイル「m_test01.py」を作成実行します。

#m_test01.py
import mod_1

height, width = 3, 5
print(mod_1.calc_area(height, width)) # 15が返ってくる

print関数で数値「15」が返ってきます。これは、同じフォルダーにある「mod_1.py」内の関数「calc_area」を呼び出して計算をした結果です。モジュールを呼び出すにはimport文を使用します。モジュール内の関数、変数、クラス(本連載ではまだ触れていません)などを使用する場合には、以下のように記述します。

モジュール名.名前

名前の部分には、関数名、変数名、クラス名などが当てはまります。

モジュール呼び出し時の挙動

次に同じフォルダーの中に、「mod_2.py」を作成します。内容は以下の通りです。

#mod_2.py
def calc_area(x, y):
    return x * y

x = 2
y = 3
print(calc_area(x, y)) # 6が返ってくる

今度は関数以外に、関数を呼び出しているコードが書かれています。このコード自体を実行すると「6」が返って来ます。次に同じフォルダー内に以下のファイル「m_test02.py」を作成実行します。

#m_test02.py
import mod_2 # 6が返ってくる

print(mod_2.x) # 2が返ってくる

height, width = 3, 5
print(mod_2.calc_area(height, width)) # 15が返ってくる

今度はモジュールをインポートした際に、「6」が返ってきました。これは「mod_2.py」をインポートした際にファイル内のコードが実行されたことを意味します。次に「mod_1.x」でモジュール内のxを読み込めていることが、確認できます。最後はモジュール内の関数を呼び出して計算結果を返しています。

import文は実行された際に、指定したモジュール自体を実行しているのです。

呼び出し時に実行しないようにするには

import実行時に、モジュール自体を実行して問題ない場合はこれでいいのですが、記載してある関数などを使用したいだけの場合は以下のように記述します。

#mod_3.py
def calc_area(x, y):
    return x * y

if __name__ == '__main__':
    x = 2
    y = 3
    print(calc_area(x, y)) # 6が返ってくる

今度は関数以外のコードの前にif文が記載されています。こちらのコード自体も実行すると「6」が返って来ます。次に同じフォルダー内に以下のファイル「m_test03.py」を作成実行します。

#m_test03.py
import mod_3 # 何も返ってこない

# print(mod_3.x) # エラーになる

height, width = 3, 5
print(mod_3.calc_area(height, width)) # 15が返ってくる

今度はインポート時に何も返ってきませんでした。また、「mod_3.x」にアクセスしようとするとエラーになりました。最後の関数呼び出しのみ実行されています。

nameとは

name」は、プログラムを実行する際に自動的に作成される特殊な変数です。特殊属性とも言います。この変数には、実行中のプログラムのモジュール名が自動的に代入されます。また、変数名の前後にアンダースコア2つで括っていますが、これを「ダンダー」と呼びます。

フォルダーの中に、「mod_4.py」を作成して実行してみましょう。

#mod_4.py
def func_test():
    pass

print(__name__) #直接実行した場合は'__main__'が返ってくる

この様に、自分自身を実行している場合はnameに'main'が代入されます。次に同じフォルダー内に以下のファイル「m_test04.py」を作成実行します。

#m_test04.py
import mod_4 #呼び出した場合には'mod_4'が返ってくる

今度はモジュール名'mod_4'が返ってきました。この様にnameを使うと、モジュールが単体で実行されたのか、呼び出されたものなのかを識別できます。

モジュール内に、デバッグ用のコード等を書いて置いておいて、実際の使用時には実行させたくない場合、

if __name__ == '__main__':

の後にコードを置いておくと、管理しやすいです。

次回もモジュール

いかがでしようか。モジュールは本格的な開発には欠かせない機能なので、しっかり身につけたいところです。次回もモジュールです。便利な読み込み方を学びます。お楽しみに!!

hirocom777.hatenadiary.org

Python再学習のまとめはこちら!!

2024途中振り返り_1

2024の目標は?

今日は2024年3月31日です。2024年も1/4が過ぎようとしています。いつものように、このタイミングで2023年の途中振り返りをしてみたいと思います。

2024の目標

2024年1月に立てた目標ですが以下になりますね。順を追って今の状態を見ていきましょう。

hirocom777.hatenadiary.org

健康

ダイエット成功しました!! ポイントは体重が減ってきたら、運動量を少し減らすこと!!今まで体重が減っても運動量を減らしていなかったのですが、結果体調が悪くなってダメになっていました。体重が増えてきたら、食べる量を減らして運動量を増やします。このさじ加減が重要だったようです。この調子で頑張ります。

AIに挑戦

現在Pythonの再学習としてブログを書いているのですが、ネタ出しに少しだけ使いました。使ってみれば便利なのですが、使うタイミングが難しいですね。

仕事

1月から技術ライティング講座を拝命して、先日ようやく完了しました!!講座からは、 5月の技術書典に向けて書籍を執筆していただける方も出てきました。コチラも全力でサポートしている最中です!!

プログラミング

Python講座の初級、中級を実行したので、これらをベースにPythonの再学習に取り組み始めています。こちらもブログの連載形式で進めています。Pythonは基本的なところから進めていくと、とんどん沼にはまってきますね。こうしてみると講座で習った部分はほんの触り程度で、これから長い道のりが続くみたいです。

資格を取る

簿記3級の学習を続けているのですが、今回はあまり進んでいません。ブログを1記事書いただけですね。4月から頑張りたいと思います。

アウトプット

  • ブログ
    頑張りました。3月までで本記事を除いて31本の記事を書いています。技術ライティング講座にあわせて、自分の感想を書いた記事を8本。Python関係で書いた記事が15本。去年から続いていたGAS関係の記事が3本。後は、その他ですね。

  • 発表
    電子工作の集まりで簡単な発表をしました。

新しい発見

前述した通り、技術ライティング講座の講師を1月から始めて3月で完遂しました。グダグダなところがたくさんあって、色々迷惑をかけましたが皆さんの協力でなんとかなりました。

あと、今新しい本の企画を考えてるんですよね。

少しずつ進めていきたいと思っています。

また3か月後に・・・

そんな訳で「2024途中振り返り_1」でした。また3か月後に振り返りの記事を書こうと思います。とりあえず次は、5月の技術書典に向けて頑張ろうと思います!!

関数の記述_2(Python_16)

この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、関数の記述方法についてご紹介しました。Pythonには便利な組み込み関数がたくさんあります。

今回も関数の記述です。引数の指定方法について、さらに突き詰めていきたいと思います。

可変長キーワード引数

前回、位置引数、キーワード引数、可変長位置引数をご紹介しました。そして、キーワード引数にも可変長引数があります。これを可変長キーワード引数と呼びます。可変長キーワード引数を指定するには、以下のように記述します。

def 関数名(**引数):
    # 処理

引数名は任意で良いのですが、慣例的に「**kwargs」とすることが多いです。以下は可変長キーワード引数の例です。

def print_keyword_args(**kwargs):
    print(args)

print_keyword_args(name = 'Bob',gender = 'mail',age = 25)
# {'name': 'Bob', 'gender': 'mail', 'age': 25}をが返ってくる

この様に、可変長キーワード引数で渡された値は辞書の要素として処理されます。 また、関数呼び出し時に辞書に「**」をつけて引数に指定することで、辞書を直接渡すこともできます。

d = {'name': 'Bob', 'gender': 'mail', 'age': 25}
print_keyword_args(**d)
# {'name': 'Bob', 'gender': 'mail', 'age': 25}が返ってくる

参照の値渡し

プログラミング言語では、関数に引数で値を渡す場合、主に「値渡し」と「参照渡し」があります。ところがPythonでは「参照の値渡し」という手法を取ります。いったいどのように動作するのでしょうか。それぞれの動きと特徴について見ていきましょう。

  • 値渡し
    値渡しは、引数で指定された値をコピーして、関数の中で使用していく方式です。C言語は基本的に値渡しです(ポインターを使って指定する方法もあるが、ここでは省略します)。関数内に値をコピーするためメモリを消費します。渡された値が関数内で変更されても、関数外では影響がありません。

  • 参照渡し
    参照渡しは、値そのものを渡すのではなく、値のキー(メモリーのアドレス、idなど)を渡します。結果、呼び出し側と同じものを操作することになるので、関数内での変更は関数外にも影響があります。逆にこれを使用して、呼び出し側に値を返すようなプログラムも書けます。また実装にもよりますが、値渡しよりもメモリの消費は少ない傾向にあります。VBAには値渡しと参照渡しの両方があります。

  • 参照の値渡し
    参照の値渡しは、値のキーを変数にコピーして渡します。Pythonではid関数で取得できるオブジェクトIDが、キーになります。変数にコピーされたIDが指すオブジェクトを関数内で変更した場合、関数外でも同じオブジェクトIDで指定されるオブジェクトの内容が影響を受けます。これは参照渡しと同じような動きです。

    しかしながら、関数内の変数には別のオブジェクトIDに上書きできます。この場合、関数外には影響を及ぼしません。

参照の値渡しの動き

Pythonでは、この参照の値渡しの動きをきちんと認識していないと、関数のプログラムミスの原因になります。たとえば以下のプログラムの場合を見てみましょう。

def incriment(val):
    val = val + 1
    print(val)

val_1 = 1
incriment(val_1) # 2が返ってくる
print(val_1) # 1が返ってくる(関数内の変更は影響されない)

関数の中で変数の値に1を足していますが、関数の外では値は変わっていません。これは一見値渡しの動作に見えますが、関数内の変数val_1は、値を1足した時点で別のオブジェクトになっているのです。以下のプログラムではどうでしょう。

def append_list(l_1):
    l_1.append(1)
    print(l_1)

list_1 = [0]
append_list(list_1) # [0, 1]が返ってくる
print(list_1) # [0, 1]が返ってくる(関数内の変更が影響する)

関数内での変更が、関数外にも反映されています。appendメソッドでリストに要素を追加した場合、既存のオブジェクトの修正になるので別のオブジェクトにはならないからです。これは一見参照渡しの動作に見えます。

以上の結果をもって「イミュータブルは値渡しで、ミュータブルは参照渡し」と解釈している記述が見受けられますが、違います。

以下のプログラムでは、動作が変わってきます。

def change_list(l_1):
    l_1 = l_1 + [1]
    print(l_1)

list_1 = [0]
change_list(list_1) # [0, 1]が返ってくる
print(list_1) # [0]が返ってくる

関数は同じ値を返してきますが、関数内の変更は関数外に反映されません。リスト同士を結合すると、新しいオブジェクトに書き換わるからです。

イミュータブルなオブジェクトを渡した場合でも、関数内の変更が反映される場合があります。

def change_tuple(t_1):
    t_1[1][0] = 'X'
    print(t_1)

tuple_1 = (['A'],['B'])
change_tuple(tuple_1) # (['A'], ['X'])を返す
print(tuple_1) # (['A'], ['X'])を返す

このプログラムでは、関数内の変更が関数外にも反映されています。タプル(イミュータブルなオブジェクト)内のミュータブルなオブジェクト(この場合はリスト)は変更可能でしたね。この場合はオブジェクトの修正になります。

次回はモジュール

いかがでしょうか。Pythonの関数の性質がわかってきたと思います。次回はモジュールです。プログラムでよく使うコードを部品にできます。お楽しみに!!

Python再学習のまとめはこちら!!

本を書こうとする皆さんへ

HiroCom777です。1月から始まったノンプロ研の技術ライティング講座の講師をしています。

技術ライティング講座の第8回は「GitHubによる共同作業」、第9回は「書籍の企画と執筆」です。執筆者、編集者が共同作業を行うときに使用するプラットフォーム「GitHub」の使い方と、実際に書籍の執筆する際の段取りについて学びました。技術ライティング講座は以上で終了です。

技術ライティング講座を終了して、課題として提出した企画書が審査に通ると、書籍(技術書典での同人誌)執筆のチャンスもあるというものです。僕も2冊ほど書かせていただきました。

今回は、書籍を執筆する際のコツについて、僕なりの考え方を述べたいと思います。

まとまった文章を書く練習

いきなり本を書くといっても、無理だと思う人がほとんどではないのでしょうか。そんな経験したことないし、何を書いていいかわかりませんよね。

ですので最初は肩ひじ張らずに、まとまった文章を書く練習から始めればいいと思います。ブログ記事の執筆は、ちょうどいい練習になります。内容は良識的な範囲であれば、何でもいいです。そもそも、まとまった文章を書けない人は本なんか書けないのです。

練習を続けていくうちに、自分の文章のスタイルがわかってくるでしょう。書きやすい文章の長さ、分野、スタイルなどなど、書いていくうちに気が付くことがあると思います。結局これらのことは、書いてみないとわからないのです。こうして文書を書くスキルが身についてきます。

この後本を書くことがなかったとしても、文章を書くスキルは色々なところで役に立つでしょう。

書きながら考える

何か明確なテーマが決まらないと文章が書けないという人がいますが、僕のオススメは「書きながら考える」です。人間はわかっているつもりでも、書き出して、整理して、見直してみないとわからないことがあります。書いていくうちに、次の記事のネタを思いついたり、今までの考え方の間違いに気が付いたりすることは、よくあることです。

ネタを探してみる

まとまった文章を書くことに慣れたら、何かネタを探す習慣を付けましょう。面白そうなネタがあったら、文章にしてみてください。学んでみたいことがあれば、それをテーマに何本かブログ記事を書いてみましょう。学習がはかどると思います。

書いた記事は、ときどき読み返してみてください。何か新しい発見があるかもしれません。また、もっといい書き方があると感じた場合には、修正してみるのもいいでしょう。

企画書を書いてみよう

特定のテーマで何本か記事を書いたら、記事を元に企画書を書いてみましょう。企画書を書いて、執筆の方針(骨組み)を明確にしていくと、徐々に書籍執筆のめどが立ってきます。 書いた企画書を見直してみて足りないところがある場合は、その部分の学びが足りないのかもしれません。ブログ記事を書き足して、補強してみましょう。他の人に見てもらって、意見を聞くのもいいと思います。

いよいよ執筆

元ネタとなる記事もでそろって、企画書で執筆の方針も明確になったら、執筆に着手しましょう。言うまでもなく、執筆には膨大な時間がかかります。気長に粘り強く続けることが大事です。以下、執筆中に意識しておくといい点を挙げてみました。

  • 読み返しながら書こう
    書いたものを頻繁に読み返す癖を付けましょう。筆が乗っているときに、一気に書くことは問題ありません。でも、あとで見直してみると自分の考えていたものと違うということは、よくあることです。また、読み返すことで新しいアイディアが見つかったりします。

  • 書きながら宣伝してみよう
    長い間執筆を続けていると、気力が続かなかったり、行き詰ったりすることがあります。そんな時はSNSなどで、自分が本を執筆中であることを宣伝してみてはいかがでしょうか。フォローしてくれている人が応援してくれたり、感想を言ってくれたり、場合によってはアイディアを出してくれるかもしれません。執筆意欲が長続きします。

  • 書評を書いてもらえるか意識して書こう
    書いた本を買ってもらって、書評を書いてもらうとうれしいですよね。書評をブログにあげてもらったりすると、いい宣伝になります。買った本の書評を書いてもらえるということは、いい本だと思ってもらえているということです。書評を書いてもらえるか意識しながら書くと、自然と読者の立場で書くことができるものです。

書籍執筆にチャレンジしてみましょう

以上、書籍を執筆する際のコツについて考えてみました。皆さんも、書籍執筆にチャレンジしてみてください。ここまでお付き合いいただき、ありがとうございました!!

関数の記述_1(Python_15)

この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、組み込み関数についてご紹介しました。Pythonには便利な組み込み関数がたくさんあります。

今回は、関数の記述です。組み込み関数のような機能を、自分でプログラミングできるのです。

関数を作る

前回もお話した通りPythonで関数とは、入力値に対して何らかのまとまった処理を施し、その結果を返す機能になります。Pythonにはまとまった処理を、関数としてプログラミングする機能があるのです。

関数の記述方法は、以下になります。

def 関数名(引数1, 引数2,・・・):
    # 処理
    return 戻り値 #戻り値がない場合は省略できる

returnの後にもプログラムを記述できますが、実行はされません。 記述した関数は、以下のように呼び出します。呼び出す関数は、それより前に記述されている必要があります。

関数名(引数1, 引数2,・・・)

以下は、value_1をvalue_2で割ったときの余りを計算する関数の例です。

def calc_remainder(value_1, value_2):
    return value_1 % value_2

print(calc_remainder(7, 5)) #2が返ってくる

関数に戻り値が指定されていない場合、「None」が返されます。これは前回ご紹介したprint関数の結果と同じです。

def empty_func(value_1, value_2):
    pass

print(empty_func(2, 5)) #Noneが返ってくる

上記関数の「pass」は、何もしないコマンドです。文法的に何かを記述しなければならないが、何もしたくないときに記述します。

引数の指定方法

上の例では関数に値を渡した位置によって、受け取る値が決まります。このような引数の渡し方を「位置引数」といいます。

これに対して引数の名前を指定して、値を渡すこともできます。これを「キーワード引数」といいます。上の関数をキーワード引数を使って呼び出すと、以下のようになります。

print(calc_remainder(value_2 = 5, value_1 = 7)) #2が返ってくる

この様にキーワード引数を使うと、値を渡す順番を変えても同じ結果を得ることができます。位置引数とキーワード引数は混在できますが、最初に位置引数を指定して、その後にキーワード引数を指定なければなりません。

また、キーワード引数を使うと省略できる引数(後述するデフォルト引数値)をとばして指定した引数に値を渡すことができます。

デフォルト引数値

関数の引数指定を省略した場合、デフォルトの値を持たせるようにできます。これを「デフォルト引数値」といいます。デフォルト引数値を指定するには、以下のように記述します。

def 関数名(引数 = デフォルト値):
    # 処理

以下は税込み価格を返す関数の例です。tax_rateを省略すると、10%となります。

def get_total_price(price,tax_rate = 10):
    return int(price * (1 + tax_rate /100))

print(get_total_price(100,8)) # 108を返す
print(get_total_price(100)) # 110を返す

可変長位置引数

関数に任意の複数の値を渡したい場合、値のリスト、タプルなどを作成して渡せば可能になります。しかし、この方法では事前に渡したいオブジェクトを作成しなければなりません。「可変長位置引数」を使用すると、オブジェクトを作成しなくても任意の複数の値を渡せます。可変長位置引数を指定するには、以下のように記述します。

def 関数名(*引数):
    # 処理

引数名は任意で良いのですが、慣例的に「*args」とすることが多いです。以下はキーワード引数の例です。

def print_positional_args(*args):
    print(args)

print_positional_args(10, 30, 20, 40) # (10, 30, 20, 40)が返ってくる

この様に、可変長位置引数で渡された値はタプルの要素として処理されます。 また、関数呼び出し時にタプルに「*」をつけて引数に指定することで、タプルを直接渡すこともできます。

t = (10, 30, 20, 40)
print_positional_args(*t) # (10, 30, 20, 40)が返ってくる

可変長位置引数は、1つの関数につき1つだけになります。また、位置引数と併用できますが、配置できるのは可変長位置引数の前だけです。可変長位置引数の後はキーワード引数による指定になります。

print関数の見直し

これを踏まえて前回触れたprint関数について、見直してみましょう。

print(*objects, sep=' ', end='\n')

可変長引数で複数の出力要素を指定して、そのあとはキーワード引数でデフォルト引数値を指定している、というわけです。

次回も関数の記述

いかがでしょうか。関数を記述する際の引数指定方法には、色々あることが分かりました。次回も引き続き関数の記述について学んでいこうと思います。お楽しみに!!

hirocom777.hatenadiary.org

Python再学習のまとめはこちら!!