関数とオブジェクト


関数とオブジェクトの特徴のちがいが、わかってきた。たぶん、合っているとおもう。


(1)関数について

まず簡単な関数を書いてみよう。

def add_print(a,b):
     print(a+b)

add_print(1,2)

3

3の結果が表出しているけれど、このばあいの3は値ではない。

type(add_print(1,2))

None Type  //数値は「空」(カラ)。



def add_return(a,b):
     return a+b

add_return(1,2)

3

return文をつかい、値を関数に戻したばあい。print()と同様に、3が表出している。しかし、こちらは値となっている。

type(add_return(1,2))

int  // 数値型になっている。


いずれにせよ、関数は値の保存ができない。
もし保存したいのなら、関数のアウトプットを変数に代入する。

add_return_variable = add_return(1,2)

add_return_variable

3



(2)オブジェクトについて

関数のばあいと同様に「足し算」について、こんどはクラスを書いてオブジェクト(インスタンス)を作っていく。

class add_object:
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def add(self):
        return(self.a+self.b)

add_object_instance = add_object(1,2)   //インスタンスを作成する。

add_object_instance.add()

3

クラスによって作成したインスタンスには値が保存されていることが確認できた。
関数とオブジェクトは、ほかにもちがう点がある、とおもう。使い方のちがいまで、なれてきたら、やれることが、ずいぶん広がるだろうなぁ。「オブジェクト指向」が、おもしろくなってきたわ。

print()と、returnのちがい

関数内のprint()関数と、returnについて整理しておこう。

まず簡単な関数を書いてみる。ここでは、pythonで。

def add1(a,b):
    print(a+b)

def add2(a,b):
    return a+b

それぞれの関数に値を入れて実行させる。

add1(1,2)
3

add2(1,2)
3

いずれも3となる。

ただし、これは見た目が同じ3なんだネ。

print()によるadd1は 標準出力による3で、値にはなっていない。
一方のreturnは、値の(1,2)が関数に戻され、3という値が出力されている。

なので、
c=add1(1,2)
c
None

d=add2(1,2)
d
3となる。

このへん、やっと、理解できたわ。

まったく、あたらしいもの

1年、2年、3年というふうに、じかんがすすむにつれ、ものやことは変わっていく。

ときには、いままでの、ものやことが不都合になっていく。

なので、ぼくたちも、かんがえや行動を、あらたにせざるをえない。

といっても、いままでやってきたことにより、つちかわれた先入観は、なかなか、かえられない。

 あたらしい、ものやことに出会ったとき、あるひとは「あんなものは、つかえないよ」といったふうに、拒否感をいだくかもしれない。

すこし前向きなひとなら、いままで、じぶんがつちかってきた、ことやものと比較して、あたらしいもの中の価値をみいだすかもしれない。

でもね、まったく、あたらしいものは、そもそもパラダイムがちがうんですよ。

なので、比較しているうちに、やはり「こんなものつかえないよ」となってしまうかもしれない。

ということで、まったくあたらしいものが出てきたときは、とにかく、それをつかってみることですですな。

いままでの先入観的なことは、どうするかというと、ま、うまく説明できないけれど、抽象化して、あたらしいものと同じ棚にならべておいたりする、なんてかんじで。

for構文

for文は苦手だなぁ。いい機会なので、ここで整理してみようか。

1)まずfor文の基本を書いてみる。

引数を3にして、iの中に、順番に3つの整数が入るようにした。はじまりは1ではなく0から。なのでアウトプットされるのは、0、1、2となる。

for i in range(3):  

       print( i )

0
1
2

2)次に任意の変数を作り、順番に値をアウトプットしてみる。

animals=[‘いぬ’,’ねこ’,’ハムスター’]

print(animals[0])
いぬ

print(anmals[1])
ねこ

print(animals[2])
ハムスター

 

3) 1)と2)を組み合わせてみる。1)でiの中には、0、1、2の値が順番に入っていくことが確認できた。なので、print[i]は、順にprint(animals[0])、print(anmals[1])、print(animals[2])の値が表出する。つまり、いぬ、ねこ、ハムスターとなる。

for i in range(3):
    print(animals[ i ])

いぬ
ねこ
ハムスター

4)formatメソッドをつかい、すべてに「さん」をつける。

for i in range(3):
    print(‘{i}さん’.format(animals[i])

いぬさん
ねこさん
ハムスターさん

5)リストの数を増やしたり、減らしたりするたびに、引数を打ち替えなくてはならない。そこで、3という数字の代わりに、組み込みのlen関数を利用することにする。

for i in range(len(animals):
    print(‘{i}さん’.format(animals[i])

6)iというのは、申し合わせの英単語のようなものだ。じっさいは任意の文字で 構わない。なので、i をanimalに変更する。

 for animal in range(len(animals):
    print(‘{i}さん’.format(animals[animal]))

いぬさん
ねこさん
ハムスターさん

「animalsのリストから(animal)を順に送り出し、さんをつけて出力する」プチ・アプリが完成した。

formatメソッド

以下、pythonについて。

おなじ型(str型)をつづけるばあい

gengo1=’令和’

gengo2=’元年’

print(gengo1+gengo2)

令和元年


ちがう型(str型+int型)をつづけるばあい

gengo3 = 1

print(gengou1+gengo3)

エラー


このばあい、1をstr型の’1’にすれば解決する。

gengo4 = ‘1’

print(gengo1+gengo 4)

令和1


ただし、変数をつくるとき、str型かint型か、かんがえるのはメンドくさい。str型のformatメソッドをつかうのが一般的のようだ。

print(‘令和{}’.format(gengo3))

令和1

変数がオブジェクトになっている

必要があり、またpythonをやっている。

基本的なことだけれど。

オブジェクト > メソッド(関数)

オブジェクトは、最初から組み込まれているものもあるが、

モジュールとして読み込むもの(import モジュール名)

あるいは、必要におうじて、じぶんでも、つくれたりする。

(疑問:オブジェクトと型のちがいは?)

で、ひさしぶりにやっていて「あれ」って、おもったことがある。

pythonのばあい、変数名がオブジェクトになっていて、それに関連するメソッドがつかえるんだね。

たとえば、lowerメソッドをつかって、
Fruits = Apple
 Fruits.lower()
apple     //すべて小文字にする機能
というぐあいに。

どうやら、これ基本的なことで、なにげに、じぶんでもやっていたけれど、明示的に気づいたのは、きょうなのだ。新鮮だねぇ。

たぶんだけれど…JavaScriptは、そういう記述はできなかったと、おもう。
変数にオブジェクトを代入して、console.log()関数で、吐き出すんじゃなかったっけ?

JavaScriptでは、ToLowerCase()というメソッドで同様のことができる。

上が旗を振ること

 

かつて環境はブームだった。それは京都議定書の実効期間に重なる。

そのころ環境系の取材をしたり原稿を書いていた。

そのうちに、各自治体や企業がいっせいに同様の施策を行うことが不思議におもえてきた。

で、それなりに調べてみた。 立法や官庁の省令、補助金が自治体に大きな影響を及ぼしていることが分かった。たとえば環境省が作成した雛形を使って自治体がプランを作成するといった感じだ。

一方企業については、経団連から各事業団体へ、そして企業へ、環境についてのプランが伝えられていた。

このことに気づいてから、日本は中央官庁や経団連の力が意外に大きいとおもうようになった。

ほんじつのニュースによると、来週、経団連が「終身雇用の維持はもう出来ない」的な発表をするらしい。これ、大きな発言だとおもうよ。このタイミングでの発表。令和から変わりますって印象づけられるもんな。

個人主義とか

 

ジョン・ロックの解説を読んでいる。

政治経済の授業で、三権分立を唱えた人のように教わった気がするけれど、残念ながら、教科書など残っていないので、たしかめようがない。

書籍のなかで目を引いた一文がある。引用しよう。

「蓋然知という薄明のうちに書いた人間の善き生の規範を認識することがキリスト教の存在根拠そのものを記している」

クリスチャンであるジョン・ロックにとって、神は沈黙している。けれど「一生懸命になれば(沈黙以外の)神が人に与えるメッセージは分かるだろう」的なことだろうと、おもう。それがジョン・ロックの指す理性かもしれない。

いま中国の台頭が注目されている。しかしヨーロッパ、あるいはアメリカが主導している世界は、せいぜい、ここ300〜400年くらいでしょう。もっと俯瞰すれば、おおよそ世界の中心は中国やイスラムだったとおもう。

欧米が近世、近代に台頭したのは、数学から複式簿記まで、さまざまなツールが開発されてきたからだとおもうけれど、その根本には、やはりプロテスタントから派生したパラダイムがあるのではないか。パラダイムから派生した個人主義。そもそも日本には、そのような価値体系がないわけで。漱石の小説なり講演なりから読み取れる個人主義は、ヨーロッパからすると、とてもユニークなものだろう。

マスコミねぇ。

 
 ブラックホールが可視化された。数年前には重力波が確認された。量子コンピュータが可動している。中国では人にもゲノム編集が施された(らしい)。

  …ディープラーニングは、ぐんぐん進んでいる。英語ならYouTubeの映像の音声は、ほぼほぼ正確に文字化されている。自動翻訳の精度も上がった。セサミストリートなら、翻訳された日本語は気にならない。Tedでも内容を知るくらいなら問題はない。

  グーグルの検索エンジンは、いまや文字での検索だけではない。知らない画像、似た画像を調べたいとき、手元のその画像をアップロードすれば、ディープラーニングにより、関連した画像を閲覧することができる。

  以上、書きつらねたことは、ひとつをとっても、以前なら、とても大きな話題になったとおもう。にもかかわらず、なにげな感じになっている。なぜだろう?

 いぜんなら、こういうのはテレビや新聞に大きく報じられたでしょう。でも、げんざいは、それほど大きく報じられないのは、マスコミの記者や編集が、うまく理解できていないからだ。そして日本発でもないので、パブリシティ的にも発信もしない。かくして日本は、世界のセンセーショナルな動きから取り残されいくという。ま、これは個人的な仮説ですな。

  マスコミは、ピエール瀧など個人的なことを大きく報じるんだよなぁ。どう考えても、ブラックホールのような話題の方が大きいでしょう。ちなみに電気グルーブは、とても良いです。「電気ビリビリ」最高〜!