PythonStudyNote
-
投稿者投稿
-
2019年9月22日 5:03 PM #650
管理人
キーマスタークラス models でデータを扱うクラスというもの
出てくるキーワード class データの型 def
pythonでクラスとは
クラスとは、オブジェクトを生成する“型” オブジェクトというのは 変数や関数を、ひとまとまりにしたもの。
上手い例え 車というオブジェクト 変数タイヤ ボディ エンジン ハンドル 関数タイヤの状態の取得やブレーキという操作 ドアが開いているかどうかのチェックや警告 エンジンの制御 ハンドルの入力にあわせたタイヤの操作
ということはクラスとは変数や関数をひとかたまりにした型ということになります つまりクラスという変数や関数を使った型でデータを扱える 表出されるデータがインスタンスというのかな
クラス関数はメソッドと呼ばれますこのクラス(型)からインスタンスを生成し、処理を行います。
ここでインスタンスとは インスタンスとは、型となるクラスを元に生成した実体
クラスは設計図、インスタンスは設計図から作られた物
実際の処理では、インスタンスを生成する事によってそのクラス内の処理を実行できるようになります。
例は後述では実際にクラスの作り方“class”キーワードの後に任意のクラス名を書きその下にメソッドや変数を書く
class className(): #キーワードクラスとクラス名
def myprint(self): #関数はじまるよキーワードdefと関数名(任意)myprint(関数呼び出し)とパラメーターリストself(selfはインスタンス自身)「仮引数」(その関数が受け取る値のリスト)別のとこにパラメーター(実引数)があると渡される
print(“Hello World!”) #関数で行う処理キーワードprint(引数に受け取ったものを画面などに出力する)と関数ボディ関数本体メソッド(クラスの関数)は、クラスと同じ要領で”def”キーワードの後に任意のメソッド名を入れ、そこに引数を与えます。
引数とは処理をする上で必須となる、メソッドやクラスに引き渡す値 何らかの値を渡すと、その値に応じた何らかの値を返すもの
Pythonでは、関数は「def文」を使って定義する。「関数の定義」とは「関数の名前、その関数を実行するのに必要なデータが何か、実際に実行するコードがどんなものかをPythonに伝えること」2019年10月5日 4:58 PM #659管理人
キーマスターコンストラクタとは、オブジェクトが生成される時に実行されるメソッド(関数)のことです。オブジェクトが扱う変数などの初期化を主に行います。オブジェクトはクラスをもとに生成されます。
オブジェクト指向のプログラミング言語新たなオブジェクトを生成する際に呼び出されて内容の初期化などを行なう関数、メソッドのことである。
設計書をもとにプログラム内で実際に使うためには、実体化(インスタンス化)が必要となります。
コンストラクタの名前は「__init__」に決まっています。名前の前後に「__」が付いているメソッドは「特殊メソッド」と呼ばれます。コンストラクタは特殊メソッドの1つです。
コンストラクタで「name」を指定することで、オブジェクト変数「self.name」を初期化しています。オブジェクト変数がコンストラクタで明示
猫 tora は2つの「値」を持っています。 猫 tora は、名前 name があり、とら と言います。 猫 tora は、動物として分類 family されていて、猫 科に属します。
猫 tora は2つの「処理」を行うことができます。 猫 tora は、鳴く say することができます、にゃー と。 猫 tora は、唸る growl することができます、ウー と。
猫 tora は、動物として分類 family されています。 みな鳴くこと say ができますし、唸ることもできます growl。class Cat:
family = ‘猫’def say(self):
print(‘にゃー’)def growl(self):
print(‘ウー’)tora = Cat()
tora.family
tora.say()
tora.growl()>>> tora.family
‘猫’
>>> tora.say()
にゃー
>>> tora.growl()
ウーインスタンス化する時に名前をつけたいです。 インスタンス化する時に __init__ が、自動的に呼び出されるのでこれを使います。
class Cat:
family = ‘猫’def say(self):
print(‘にゃー’)def growl(self):
print(‘ウー’)def __init__(self):
# 1. 第一引数 self には名前のない猫オブジェクトが
# 自動的に代入されています。
self.name = ‘とら’# 2. self は return しない
# return selftora = Cat()
tora.name
>>> tora.name
とら
>>>2019年10月22日 5:48 PM #682管理人
キーマスターclass Cat:
family = ‘猫’def say(self):
print(‘にゃー’)def growl(self):
print(‘ウー’)def __init__(self, name): # <--- __init__ の引数は2つ self.name = name tama = Cat('たま') # <--- インスタンス化の引数は1つ tama.name dora = Cat('ドラえもん') dora.name >>> tama = Cat(‘たま’)
>>> tama.name
‘たま’
>>> dora = Cat(‘ドラえもん’)
>>> dora.name
‘ドラえもん’
self をつけて後からから確認することができる変数を インスタンス変数 と言います。self をつけず後から確認することができない変数を ローカル変数 と言います。
class Cat:
def __init__(self, name):
# インスタンス変数
# そこで名前をつけてあげる。
# その時、必ず self をつけないといけません。
self.name = name# ローカル変数
# self をつけない変数は参照できません。
age = 0dora = Cat(‘ドラえもん’)
dora.name
dora.age # <--- AttributeError になります >>> dora = Cat()
>>> dora.name
‘ドラえもん’
>>> dora.age
Traceback (most recent call last):
File ““, line 1, in
AttributeError: ‘Cat’ object has no attribute ‘age’
>>>関数とは違い自動的に、self にインスタンスが代入される
関数とは違い自動的に、インスタンス化した時に呼び出される
関数とは違い自動的に、return していないのに self が返されるIndentationError: expected an indented block
インデント(行頭に空白で字下げすること)がない。。。
ちゃんとインデント入れて!!!!!!!!!!インデントとは、行頭に空白を入れて文字を入れて字下げを行う事を言います。
pythonにおけるインデントは非常に重要です。
なぜなら、pythonは同じ数の空白でインデントされたまとまりを一つのブロックと認識する為です。NameError: name ‘name’ is not defined
NameErrorは日本語にすると名前のエラー。つまり、変数の名前に関するエラーです。
name ‘xxx’ is not definedの意味は、xxxという名前の変数が定義されていませんという意味です。
2019年10月22日 5:51 PM #683管理人
キーマスター変数とは、文字や数値、計算式を自分の好きなキーワードに記録できる機能
import requests
bf = requests.get(‘https://api.bitflyer.jp/v1/ticker/?product_code=BTC_JPY’😉
bb = requests.get(‘https://www.btcbox.co.jp/api/v1/ticker/’😉print(‘【国内主要取引所の現在のビットコイン価格】’)
print(‘bitFlyer ‘ , bf.json()[‘ltp’] , ‘円/BTC’)
print(‘BTCBOX ‘ , bb.json()[‘last’] , ‘円/BTC\n’)bf_e = bf.json()[‘ltp’]
bb_e = bb.json()[‘last’]
average_price = (bf_e + bb_e)/2print(‘【国内取引所の平均価格】\n’ , average_price , ‘円/BTC\n’)
bf_v = bf.json()[‘volume’]
bb_v = bb.json()[‘vol’]
average_volume = (bf_v + bb_v)/2
print(‘【国内取引所の平均出来高】\n’ , average_volume , ‘BTC’)実行すると
【国内主要取引所の現在のビットコイン価格】
bitFlyer 858839.0 円/BTC
BTCBOX 859538 円/BTC【国内取引所の平均価格】
859188.5 円/BTC【国内取引所の平均出来高】
41201.43409219 BTCすげー
2019年10月22日 5:53 PM #684管理人
キーマスターpython for文
for 変数 in オブジェクト:
実行する処理
pythonのfor文では、変数の後ろに「in」が付くことと、オブジェクトの後ろに「:」が付くことに注意しましょう。>>> words = [‘Japanese’, ‘English’, ‘French’] #オブジェクトwords 配列j e f
>>> for w in words: #変数w に オブジェクト配列要素を繰り返し処理 j代入 2番めe代入 という処理
… print (w)
…
Japanese
English
French5回繰り返すfor文
>>> for num in range(5): #「range(5)」と記述することで、変数numに0から4までの数字が繰り返し代入されていくということ
… print(num)
…
0
1
2
3
4
>>>「range(5, 10)」と記述することで、5から9までの範囲を指定
range(0, 10, 3)の3は、増加量を表しています。つまり、0以上10未満の数字の中で、3ずつ増加するということなので、「0・3・6・9」が出力2019年11月3日 4:43 PM #702管理人
キーマスターbool型
どのプログラミング言語でも真偽を判定するためのブール型(bool・boolean)は用意されています。
ブーリアン型(ブーリアンがた、英: Boolean datatype)は、真理値の「真 = true」と「偽 = false」という2値をとるデータ型である。
真偽値は真(True)と偽(Flase)の二種類が用意されています。条件式や論理演算で確認するときなどに、
条件式の結果が真(True)なら処理を実施する
条件式の結果が偽(Flase)なら実施しない のような使われ方をします。ターミナルでpython3
比較演算子とbool型
>>> x = 100
>>> y = 200
>>> b1 = x < y >>> print(b1)
True
>>> b2 = y < x >>> print(b2)
False式とprintは行変えてるけど送信すると一行になっちゃうな
この例はわかりやすいけど2019年11月3日 4:57 PM #705管理人
キーマスターfilter
リストのようなものから条件にあった要素のみを取り出す 抽出(スクリーニング)
逆に、条件を満たさない要素のみを抽出したい場合は、itertools.filterfalse()
Pythonに実装されたfilter関数は、与えられた条件がTrueである要素のみを取り出してくれます。
filterに渡す「条件」が関数なので、一般に高階関数と呼ばれている機能
関数を受け取る関数か返り値として関数を返す関数の事を指します。
普通、関数の引数には何かしらの値を持ったオブジェクトを渡しますね。しかし中には関数を受け取る関数もあるんです!
数字のリストから偶数の数字のみを取り出す操作例
まずは偶数を評価する関数def even_evaluator(x:int)->bool:
… return x % 2 ==0
…
>>> print(even_evaluator(18))
True
>>> print(even_evaluator(91))
Falseよしよし 続きはあるよ
2020年2月2日 4:33 PM #809管理人
キーマスター止めたり諦めたり挫折したわけじゃありません。しかし、進めないな。
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type “help”, “copyright”, “credits” or “license()” for more information.
>>> def even_evaluator(x:int)->bool:
return x % 2 ==0
print(even_evaluator(18))
SyntaxError: invalid syntax 構文が違うそうだ
>>> print(even_evaluator(18))
Traceback (most recent call last):
File ““, line 1, in
print(even_evaluator(18))
NameError: name ‘even_evaluator’ is not defined インデントかな
>>> def even_evaluator(x:int)->bool:
“””この関数は引数が偶数ならばTrue,
奇数ならばFalseを返します
“””
return x % 2 ==0>>> print(even_evaluator(18))
True
>>> print(even_evaluator(91))
False
>>>ここまで普通の関数すね。
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type “help”, “copyright”, “credits” or “license()” for more information.
>>> def even_evaluator(x:int)->bool:
return x % 2 ==0>>> num_list = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> even_list = filter(even_evaluator, num_list)
>>> print(list(even_list))
[0, 2, 4, 6, 8] 偶数のリストが取り出された
>>>シーケンスから条件にあった要素を抽出し、別のシーケンスを作ることが出来るのがfilterになります!
簡単な条件であればもっと簡単に、無名関数lambdaを使って指定
>>> even_evaluator2 = lambda x:x % 2 ==0
>>> num_list2 = list(range(10,20)) # [10, 11, 12, 13, 14, 15, 16, 17, 18,]
>>> even_list2 = filter(lambda x:x % 2 ==0, num_list2)
>>> print(list(even_list2))
[10, 12, 14, 16, 18]
>>>filterの機能をリスト内包表記で
>>> num_list3 = list(range(20,30,)) # [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
>>> even_list3 = [x for x in num_list3 if x % 2 == 0]
>>> print(even_list3)
[20, 22, 24, 26, 28]
>>>2020年7月19日 4:01 PM #1086管理人
キーマスター間隔空きすぎて忘れる。Djangoまでは入れましたが、そこまで戻るのにメモるか。
pwdで自分の位置を確認
cd で仮想環境に入る
入ったら cd でプロジェクトに入る
開発サーバーを起動する python manage.py runserver
開発サーバー起動してるの確かめる http://localhost:8000/myapp/templates/
プロジェクトが立ち上がり、作業にとりかかる準備ができました。
ここまではいってますよと。ここまでを繰り返すこと何回目か。今日もまたここまでで疲れてしもた。2020年8月8日 3:58 PM #1130管理人
キーマスターやっとpythonに戻ってきました。さあてと、今日も、既に息切れ切れですが、前の書き込み見ると作業の準備が出来ました。んー何の作業するんだろ??? ここからなんですよ。
コードを書く作業かな。つまりアプリケーションですね。なんの? それを参考サイト見直しながら探しましょ。すでに、今日は諦めモードで次回のための立ち上がりを楽にするため。
プロジェクトの中でアプリを作る作業なのだ。
では、具体的に 「Polls アプリケーションをつくる」
アプリケーションを作るには、 manage.py と同じディレクトリに入って、$ python manage.py startapp polls と入れる。つまりpollsというディレクトリを作成。ちなみにpollは世論調査とか投票とかまあ投票所でしょうね。あなんとなく、なんのアプリ作らそうとしてるのかわかったぞ。
ターミナルに続けて打つのかな? 一旦サーバー停止するか ctrl c で $出てきたから打てるか。manage.pyと同じとこに移動して。$ python manage.py startapp polls なんだ pollsというディレクトリが出来てるらしい。あったかできたか覚えてないし。いいか。 前につくったmyappディレクトリと同じだ、中身も同じスネ。つかめました。ここまでバッチす。
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
もう疲れた。次回はpolls/views.py を開いて、Python コード ビューを書くとこからす。 -
投稿者投稿
- このトピックに返信するにはログインが必要です。
共有:
- クリックして Twitter で共有 (新しいウィンドウで開きます)
- Facebook で共有するにはクリックしてください (新しいウィンドウで開きます)
- クリックして Tumblr で共有 (新しいウィンドウで開きます)
- クリックして LinkedIn で共有 (新しいウィンドウで開きます)
- クリックして Pinterest で共有 (新しいウィンドウで開きます)
- クリックして Pocket でシェア (新しいウィンドウで開きます)
- クリックして Reddit で共有 (新しいウィンドウで開きます)
- クリックして WhatsApp で共有 (新しいウィンドウで開きます)
- クリックして Telegram で共有 (新しいウィンドウで開きます)
- クリックして Skype で共有 (新しいウィンドウで開きます)
共有:
- クリックして Twitter で共有 (新しいウィンドウで開きます)
- Facebook で共有するにはクリックしてください (新しいウィンドウで開きます)
- クリックして Tumblr で共有 (新しいウィンドウで開きます)
- クリックして LinkedIn で共有 (新しいウィンドウで開きます)
- クリックして Pinterest で共有 (新しいウィンドウで開きます)
- クリックして Pocket でシェア (新しいウィンドウで開きます)
- クリックして Reddit で共有 (新しいウィンドウで開きます)
- クリックして WhatsApp で共有 (新しいウィンドウで開きます)
- クリックして Telegram で共有 (新しいウィンドウで開きます)
- クリックして Skype で共有 (新しいウィンドウで開きます)