[過去ログ] Pythonのお勉強 Part68 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
124: (ワッチョイ 4b17-NGtF) 2022/09/25(日)11:22 ID:Sdaj2srm0(1) AAS
自己満だからといっていつも意識的にそれらを考えていかなければより良い設計はできないのかもしれない
125(1): (ワッチョイ b302-nX9g) 2022/09/25(日)11:43 ID:rlnwElI30(1) AAS
クラスはメンバ変数にselfが強制だからコードが冗長になって嫌だわ
126: (オッペケ Sr47-d9EM) 2022/09/25(日)12:37 ID:uj3dGGMEr(1) AAS
>>125
インデントも深くなるし、状態持つ必要が無ければモジュール化で十分よな
127(1): (ワッチョイ 1e66-yYUR) 2022/09/25(日)12:49 ID:wq9M03AC0(2/2) AAS
大仰なクラスを作ろうとするから
インスタンス変数が2つだけ、みたいなのでも十分役立つ
128(1): (ワッチョイ 1610-d9EM) 2022/09/25(日)17:18 ID:hs4ndUhv0(1) AAS
>>127
それくらいならNamedTupleでも良いかな
129: (ワッチョイ 372c-nvXy) 2022/09/25(日)17:41 ID:iEmY5l+s0(2/2) AAS
dataclassええで
130: (ワッチョイ 4b08-KM/t) 2022/09/25(日)17:54 ID:AFTbeWYX0(1) AAS
クラスは実装の詳細を見せたくない時に限る
131: (ワッチョイ 1610-Nf8B) 2022/09/26(月)07:24 ID:ciNDFZ6I0(1) AAS
クラス名をclass Hoge
ファイル名をhoge.py
インポートでimport hoge
インスタンス名何にしようかいつも悩む
??? = hoge.Hoge()
132: (ワッチョイ 2f97-5djn) 2022/09/26(月)09:07 ID:P9G+/qqR0(1/2) AAS
>>81
そもそも[0,1]のときにx[0]を2つ取り出したいのかどうかがよくわからないな
あと、最大(?)は[0,10]じゃないか?
[0,9]のときと[0,10]のときでどう処理を変えたいのかよくわからない
半開区間に含まれる最小最大を取り出したいなら、
for i in [idxs[0], idxs[1] - 1]でいいと思うのだけどこれは嫌?
133: (ワッチョイ 2f97-5djn) 2022/09/26(月)09:12 ID:P9G+/qqR0(2/2) AAS
木構造とかグラフ構造を自作したいなら(間々ある)、
クラスにした方が便利なときある気がするけどな。
get_tree_children(node)とかしだすなら、node.children()の方が名前空間がすっきりしていいし。
実装の詳細を見せたくないかどうかというよりは、関心の分離をしたいかどうかによるような気がするな。
確かにクラス作るまでもないようなことは多いけど。
134: (ワッチョイ 1e66-yYUR) 2022/09/26(月)20:32 ID:b9hyANFk0(1/2) AAS
>>128
値が変えられないがな
135(2): (ワッチョイ 429b-+bWc) 2022/09/26(月)23:15 ID:QR+uVx8I0(1/2) AAS
python 3.9.10
a = (1, 2, 3)
b = a
c = (1, 2, 3)
print(a==b)
print(a is b)
print(a==c)
print(a is c) #True?
なぜ a is c が true になるのでしょうか?
136(1): (ワッチョイ 429b-+bWc) 2022/09/26(月)23:17 ID:QR+uVx8I0(2/2) AAS
>>135
ideone に貼っときます
外部リンク:ideone.com
なぜでしょうか?
137: (ワッチョイ 1e66-yYUR) 2022/09/26(月)23:31 ID:b9hyANFk0(2/2) AAS
a = 1
c = 1
の時と同じ理由
138: (ワッチョイ 4b17-NGtF) 2022/09/26(月)23:32 ID:Gide+MMY0(1/2) AAS
>>136
ならない
139(1): (ワッチョイ 4b17-NGtF) 2022/09/26(月)23:33 ID:Gide+MMY0(2/2) AAS
ほらよ
画像リンク
140(1): (ワッチョイ d201-/Peb) 2022/09/26(月)23:49 ID:eE4Lst2k0(1) AAS
>>139
それREPLでやってるからinterningが効いてないじゃないかな
>>135
Tupleはimmutableだからaとcが同じオブジェクトを指しても問題なくて
Pythonが最適化をした場合はa is cがTrueになるケースがある
「interning」でググってみて
例えばTupleを関数で返すようにすればinterningされずにFalseになると思う
def foo(x):
return (x, x+1, x+2)
a = foo(1)
c = foo(1)
141: (ワッチョイ 4212-+bWc) 2022/09/27(火)00:20 ID:LFY5tutJ0(1) AAS
>>140
ありがとうございます、オプティマイゼーションの余地がある、ということですね、納得しました
142: (ワッチョイ 2f97-5djn) 2022/09/27(火)19:02 ID:zjZtbJ3M0(1) AAS
a is cが真になるかはかなりケースバイケースな気がするし、
中身を比較したいんだったら使うべきじゃないね
本当に同じtupleインスタンスかどうかを確認したいときだけにすべき
143: (ワッチョイ 3733-tX/F) 2022/09/27(火)22:33 ID:3OHfLHhN0(1/2) AAS
tupleだけの話ではなくてどの型でも同じだけどね
例えば文字列とか
144(3): 2022/09/27(火)23:35 ID:tKd9rAjb(1) AAS
n=12345.67
小数点以下が何桁あるのか調べたいのですが
len(str(n).split(".")[1]) if isinstance(n, float) else 0
こんなんでいいですかね・・?
145(1): (ワッチョイ 3733-tX/F) 2022/09/27(火)23:51 ID:3OHfLHhN0(2/2) AAS
>>144
外部リンク:ideone.com
146(1): (ワッチョイ 1610-DrlT) 2022/09/27(火)23:53 ID:+joc5Asc0(1) AAS
>>144
誤差で予想外の挙動しそうだからDecimal使う方がいい
147(1): (ワッチョイ 2701-tX/F) 2022/09/28(水)02:27 ID:OOL0jr8Q0(1/2) AAS
>>144
それだと
n=1.0 -> 1
n=0.00001 -> IndexError
になる
len(format(n,".17f").split(".")[1].rstrip("0"))
後ろのif isinstance(n, float) else 0も不要
n=1.0 -> 0
n=0.00001 -> 5
148: 2022/09/28(水)09:19 ID:9I9ISsCh(1/6) AAS
>>145-147
たしかに
0.30000000000000004に対して17得られたのは正解だと思いますが
0.00001で1e-05になっててエラーでました
Decimalかformat使ってみようと思います
ありがとうございました
149: 2022/09/28(水)10:07 ID:9I9ISsCh(2/6) AAS
やりたかったことは
受けとった1234.56や0.12345などの固定小数点数に
0.1とかを掛けたり足したりして計算、変形したのを
受け取った固定小数点数の整数部と小数部の数を維持したまま
固定小数点か文字列で処理したかったのですが
改めてやってみるとなんか勝手に桁数が変わってしまいますね・・
1234.56で受け取った場合、1.05を掛けたとき→1296.288ではなく1296.29
0.12345で受け取った場合、1.05を掛けたとき→0.1296225ではなく0.12962
1234で受け取った場合、1.05を掛けたとき→1295.7でもいいし1296でもいいし1296.0でもいい
みたいにしたかったのですが難しい・・
150: 2022/09/28(水)10:17 ID:9I9ISsCh(3/6) AAS
from decimal import Decimal
str(Decimal(0.123456))
str(Decimal(0.123456)*Decimal(1.05))
#'0.1296288000000000015945911258'
あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ??
てところで詰まってます・・
151: 2022/09/28(水)11:25 ID:9I9ISsCh(4/6) AAS
冗長な気がしますがこんな感じにしてみました
何かバグが発生しそうな気がします
from decimal import Decimal
ary=[1234.5,165,0.34,0.0001,0.000001,3.00001,0.1*3,123456]
def f(n):
s=format(n)
return int(s.split("-")[1]) if "-" in s else len(s.split(".")[1].rstrip("0")) if "." in s else 0
r=1.05
for n in ary:
d=f(n)
c=Decimal(n)*Decimal(r)
rs=c.quantize(Decimal("0."+("0"*d)))
print(n,c,d)
print("-->",rs,"\n")
152(1): 2022/09/28(水)11:30 ID:9I9ISsCh(5/6) AAS
連投すみません 結果です
外部リンク:ideone.com
153: (ワンミングク MM42-nX9g) 2022/09/28(水)13:38 ID:E42G0/DqM(1) AAS
元々の桁数でroundしたいって感じなのかな
上下前次1-新書関写板覧索設栞歴
あと 849 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.012s