Pythonのお勉強 Part67

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ aa97-ncNf)
垢版 |
2022/05/26(木) 13:45:15.95ID:veL/wiLO0
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
 エラー文(勝手に省略orスクショうp等の横着禁止)と
 おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。

★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
  ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki ttp://python.rdy.jp/

●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その57
http://mevius.5ch.net/test/read.cgi/tech/1653225908/

〇前スレ〇 Pythonのお勉強 Part66
http://mevius.5ch.net/test/read.cgi/tech/1636970383/

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ### ​
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
156デフォルトの名無しさん (ワッチョイ 9d97-GLPP)
垢版 |
2022/06/06(月) 07:56:51.35ID:oHO1A3NO0
Pythonの場合ほとんど内包表記で書いた方が短くなるからmap,filterを使うことは少ないな。
でも、慣れたらわかるよ。
len([v for v in ln if v > n])かなあその例だったら。
2022/06/06(月) 08:12:53.83ID:vU8u/TBb0
個数なんだからlenだな
ネストしないなら内包表記でもフィルターでも大差ない
むしろフィルターの方が直感的
158デフォルトの名無しさん (スフッ Sdea-JaQN)
垢版 |
2022/06/06(月) 09:46:59.38ID:MeEZ09lYd
>>> import numpy as np
>>> i = np.array([3,5,1,2,6,9,8,7,0,4])
>>> i[i>3]
array([5, 6, 9, 8, 7, 4])
>>> len(i[i>3])
6
2022/06/06(月) 09:50:54.37ID:Ug3DHjCKa
sum(i>3) でいけるな
160デフォルトの名無しさん (ブーイモ MM39-GLPP)
垢版 |
2022/06/06(月) 10:02:06.45ID:WnvkflPwM
>>157
そうかなあ?慣れだと思うけど
メソッドチェーンでfilter,map書ければわかりやすいけど Pythonの記法だとどっちもどっちな気がする。
自分は複雑なmap/filterはむしろ内包表記に変形して理解するわw
2022/06/06(月) 10:39:40.85ID:vU8u/TBb0
filter(lambda x: x>n, ln)
[x for x in ln if x>n]

内包表記だとlnが埋没してしまう
式1 for 式2 in 式3 if 式4
という構文が複雑
式1 if 式2 else 式3 for 式4 in 式5
だともっと複雑
2022/06/06(月) 11:18:23.25ID:vU8u/TBb0
処理対象のリストが中間に来ると、ネストした時に
[ ... in list ...]
[ ... in [ ... in list ...] ...]
[ ... in [ ... in [ ... in list ...] ...] ...]
こんな増え方をするので一気に読めなくなる
2022/06/06(月) 11:27:14.55ID:UZF8Zcz90
本来はそのためのインデントだったんだが・・・
2022/06/06(月) 11:30:23.10ID:vU8u/TBb0
[x for x if x>n in ln]
という語順でif節は省略可能、みたいな文法だったら、
ネストしても文章になってた筈
165デフォルトの名無しさん (アウアウウー Sa11-fRoS)
垢版 |
2022/06/06(月) 11:50:14.01ID:Ug3DHjCKa
通常 for のネストは内側優先だが
内包 for のネストは外側優先なのか
166デフォルトの名無しさん (ガックシ 0671-GLPP)
垢版 |
2022/06/06(月) 12:10:49.41ID:GZdIbtar6
map/filterでも、あんまりややこしいのは1つの式でなく適度に分割した方がいいと思うけどね。
ifが無くても内包表記のネストが3段とかになるとそもそも相当読みづらい
内包表記でもジェネレーターの内包表記にしておけば余計なリストを作らずに済むし
JSとかRubyのln.filter(関数).map(関数).reduce(関数)のスタイルは圧倒的に読みやすいと思うけどね。
2022/06/06(月) 12:10:57.50ID:vU8u/TBb0
内包表記は[x for x in ...]の先頭のxがxじゃない時が本来の使い方で、
x for xでifを付けるなら、それはやっぱりフィルターだと思う
フィルターならフィルターだと書いた方がlambdaがあったとしても読みやすい

癌はmapで、これはどう書いても内包表記の方が優れてる
単純なmapでもそうだし条件が付くならなおさら
2022/06/06(月) 12:26:45.75ID:9Upi+T9Ya
内包表記って必要なの?
処理が少しでも早くなるならいいけど、
見辛い、理解しづらいってなんの得になるの?
2022/06/06(月) 12:29:04.88ID:v7exk6pA0
複雑な内包表記を書くときは分割するかforループにしろ
170デフォルトの名無しさん (ワッチョイ 159b-OMHl)
垢版 |
2022/06/06(月) 12:32:23.41ID:GbLd0KfZ0
内包表記でもインデントできるので、可読性をあげたい時は使ってみてください
2022/06/06(月) 12:36:05.67ID:vU8u/TBb0
インデントまで必要な時点でどうやっても読みにくい
2022/06/06(月) 12:41:55.19ID:+tLOHMcU0
mapがうんちなのは本当になんとかしてほしい
デフォルトエンコーディングをutf8にするとかどうでもいいから
173デフォルトの名無しさん (JP 0H71-4pLq)
垢版 |
2022/06/06(月) 12:50:56.61ID:m98Jb+yzH
map(int, float_no_list)みたいなときしか使わないな
この場合は、
[*map(int, float_no_list)]のほうが、
[int(v) for v in float_no_list]のより短いから使うだけ
打つ量を減らしたいだけで読みやすさで選んでないな
Jupyter上で試行錯誤が多いから。あとでちゃんとしたコードにするときに読みやすさは考える
174デフォルトの名無しさん (JP 0H71-4pLq)
垢版 |
2022/06/06(月) 13:00:44.68ID:m98Jb+yzH
>>155
ちなみに元の例に戻ると、filterを使えと書いてあるのだから、
len(filter(lambda x: x>n, ln))
かね。filter後にわざわざmapして1にしてsumする意味が感じられない。
mapで1にするなら、sum(map(lambda x: 1 if x > n else 0, ln))かな。
こっちは応用が効く場合がある(else -1にすればnより大きい個数とn以下の個数の差が求められるとか)
他にはsum(map(lambda x: int(x > n), ln))とかもあるけど技巧的だね
175567 (スップ Sdca-PXuc)
垢版 |
2022/06/06(月) 13:06:38.95ID:oBW+89oQd
>>174
>>174
len(filter(lambda x: x>n, ln))
だと
TypeError: object of type 'filter' has no len()
になっちゃう
2022/06/06(月) 13:19:09.72ID:vU8u/TBb0
ジェネレータにlenが無いのは手抜きではなくて本質的な話だよな
2022/06/06(月) 14:07:03.38ID:vZsNJksDM
len(list(filter(lambda x: x>n, ln)))

これでいけると思う
何かフィルターした後のリストの長さってのがぱっと見でわかるから個人的には内包表記よりこっちのがいいな
自分が内包表記が苦手なのもあるけど
178デフォルトの名無しさん (スップ Sdca-PXuc)
垢版 |
2022/06/06(月) 14:19:50.83ID:oLiAgBI4d
def number_of_big_number(ln, n):
f = filter(lambda x: x>n, ln)
m = map(lambda x: 1, f)
return sum(m)

よく考えたらこれでよくね?
2022/06/06(月) 14:46:26.36ID:sRSbc3ijM
リストはミュータブルなのにa, b = [1, 2, 3]; b = []; len(a);len(b)で3, 0となるのは何故なのさ?
2022/06/06(月) 14:58:54.17ID:v7exk6pA0
a = b = [1, 2, 3]; b = []; print(a, b)
a = b = [1, 2, 3]; b[:] = []; print(a, b)
2022/06/06(月) 15:00:14.40ID:wz8sfihq0
map(lambda x: 1,...はメモリ上へのlist化をさける苦肉の策だろうけど
前提条件なんか無視してsum(1 for x in ln if x > n)したほうが良さそう

>>179
なぜ両方空にならないのかという意味であれば、同じ参照でも変数は個別に存在し
単純代入は新しい参照先の割り当てに過ぎず、元の参照先を編集してる訳ではない
2022/06/06(月) 15:03:53.80ID:8NtqgJJW
a=[1,2,3]
b=a
print(a,b)
b=[]
print(a,b)
b=a
b.append(4)
print(a,b)
b.pop()
print(a,b)

>>[1, 2, 3] [1, 2, 3]
>>[1, 2, 3] []
>>[1, 2, 3, 4] [1, 2, 3, 4]
>>[1, 2, 3] [1, 2, 3]
183デフォルトの名無しさん (アウアウウー Sa11-fRoS)
垢版 |
2022/06/06(月) 15:04:51.12ID:Ug3DHjCKa
sum(map(lambda x: x > n, In))
2022/06/06(月) 15:22:37.41ID:wz8sfihq0
なるほどPythonic、ブールは整数の派生型だったな。sum(map(n.__lt__, ln))で済む事もあるか
2022/06/06(月) 15:33:43.92ID:sRSbc3ijM
ああ分かったよ参照地の値渡しってこんなんだったな
参照渡しとごっちゃになってた
ややこしいなーおい
186デフォルトの名無しさん (JP 0H71-4pLq)
垢版 |
2022/06/06(月) 16:39:39.60ID:m98Jb+yzH
sumレベルだと、reduceする意味ないよな、長くなるだけで
functools.reduce(lambda a, x: a + int(x > n), ln) とは書けるが
もっと特殊な集計をしたいのならreduceは有り得そうな気がするが
187デフォルトの名無しさん (JP 0H71-4pLq)
垢版 |
2022/06/06(月) 16:43:09.43ID:m98Jb+yzH
sum(map(lambda x: x > n, In))
は、
sum(x > n for x in ln)
にもできるね。このforはfor「文」ではないしね
2022/06/06(月) 21:04:54.69ID:OVrZnyn60
敢えてリスト内包で書いてみる

#ABCDEFGHIJKLMNOPQRSTUVWXYZ
#HOGEFIJKLMNPQRSTUVWXYZABCD

#上みたいにキーワードHOGEをもとにアルファベットを置換する暗号を作りたい
#まず暗号表の一番最初にHOGEと記載し、残りはHOGEの最後のEから続く形で
#FGHIとアルファベット通りに暗号表を埋め、Zに到達したらアルファベットの
#最初から埋める(ABCD...)。重複に注意したい。

import string
alphabets = list(string.ascii_uppercase)
key_string = list("HOGE")
cypher = []

cypher = key_string + [i for i
in alphabets
#リスト内包でキーワードの最後の文字Eの後にあり、
if alphabets.index(i) > alphabets.index(key_string[-1])
#かつキーワードに含まれていない文字のリストを作成
and i not in key_string]
#残りのアルファベットで後半を埋める
cypher += [i for i in alphabets if i not in cypher]

改行しても読みにくいですね。。。
189デフォルトの名無しさん (ワッチョイ 9d97-GLPP)
垢版 |
2022/06/06(月) 21:41:41.07ID:oHO1A3NO0
itertools.repeatとか使ったら1行の内包表記で書ける気がするけどな。
190デフォルトの名無しさん (ワッチョイ 9d97-4pLq)
垢版 |
2022/06/06(月) 21:56:47.75ID:oHO1A3NO0
key_stringの重複排除も無理やりOrderedDictで実現しといた

import string
import itertools
from collections import OrderedDict
key_string = [*OrderedDict([(c, None) for c in 'HOGE']).keys()]
([*key_string] + [c2 for c2 in itertools.dropwhile(lambda c: c <= key_string[-1], string.ascii_uppercase * 2) if c2 not in key_string])[:26]
191デフォルトの名無しさん (ワッチョイ 9d97-4pLq)
垢版 |
2022/06/06(月) 21:57:12.33ID:oHO1A3NO0
すまん最後の行はcypher = にしといてくれ
2022/06/06(月) 21:57:34.54ID:v7exk6pA0
i = alphabets.index(key_string[-1])
alphabets = alphabets[i:] + alphabets[:i]
cypher = key_string + [c for c in alphabets if c not in key_string]
2022/06/06(月) 22:33:35.11ID:OVrZnyn60
>>192
すごいスマートです
どれも勉強になりますm(_ _)m
2022/06/06(月) 22:35:12.91ID:AnrgIbHNM
key_string = ‘HOGE’
alphabets = ‘’.join(reversed(ascii_uppercase.split(key_string[-1])))
cypher = key_string + ‘’.join(x for x in alphabets if x not in key_string)

ネストした内包表記ほどじゃないけど
メソッドチェーンで書けないからかなり読みにくい
実際作るなら各行を関数化して関数名で意図が伝わるようにする
2022/06/06(月) 22:40:48.17ID:AnrgIbHNM
>>192のindexとsliceで入れ替えるほうがPythonっぽいかも
splitしてからreverseしてみたいに考えるのは他の言語の影響を強く受けてる
196デフォルトの名無しさん (スップ Sdca-PXuc)
垢版 |
2022/06/07(火) 17:29:22.71ID:TSpMo2rsd
pandasってなぜパンダなの?
2022/06/07(火) 17:38:59.82ID:MOJeClMf0
Pediatric Autoimmune Neuropsychiatric Disorders Associated with Streptococcal Infections
2022/06/07(火) 17:53:38.32ID:MOJeClMf0
UnRAR.exe でrarの中身のリストを取ってくる時、sjisに無い文字が?になってしまう
7za.exe はutf-8で出力するモードがあって問題は起きないけど、UnRARはsjis固定ぽい
詰んでる?
2022/06/07(火) 20:44:13.38ID:MOJeClMf0
よく判らんのが、コンソールに表示させるだけなら正しく表示される
ファイルにリダイレクトさせると化けてるというか?に置き換えられてる
恐らくそれと同じ理由で、subprocess.PIPEもおかしくなる
2022/06/07(火) 21:02:33.25ID:MOJeClMf0
7zaではなく7zにすればrarも扱えるので解決
2022/06/08(水) 12:21:03.28ID:7ub2o1NQ0
for
 try:
  処理
 except:
  continue
 finally:
  後処理

みたいに書くと、finallyを無視してcontinueしてしまうのでは?と思ったけど
そんなことは無かった
2022/06/08(水) 12:46:08.13ID:vcMlxkVMd
普通そんな書き方そもそもしない
2022/06/08(水) 12:51:55.05ID:cdI+dEzz6
変なとこに飛ばないためのfinally なので
2022/06/08(水) 17:17:05.18ID:7ub2o1NQ0
文字列のリストがあって、先頭が#で始まっていない最初のものを取り出す
ループを使わずに書くには?
2022/06/08(水) 17:20:35.02ID:E4mWgpqm0
そんなのループでいいけど
next(s for s in L if not s.startswith('#'))
2022/06/08(水) 17:21:15.32ID:AiIZO1YE0
>>204
[w for w in list if not w.startswith(“#”)]
2022/06/08(水) 17:22:19.41ID:AiIZO1YE0
あ、その[1]か、最初だから
2022/06/08(水) 17:22:54.21ID:AiIZO1YE0
ごめん0だった
2022/06/08(水) 17:30:28.69ID:7ub2o1NQ0
next()はStopIterationが怖い
2022/06/08(水) 17:31:33.09ID:E4mWgpqm0
第2引数
2022/06/08(水) 17:39:20.66ID:7ub2o1NQ0
該当するものが無かった場合、デフォルトを設定しておいて、もしデフォルトだったら、とするか、
普通にエラーにしてtryで捕まえるのとどっちがいいだろう

エラーが出ないようにいろいろ配慮して書くより、何も考えずにエラーにする方が
python的な気がしてきた
212デフォルトの名無しさん (ワッチョイ ea2c-oPJe)
垢版 |
2022/06/08(水) 17:48:28.41ID:xigHBt180
そんなもんpythonでなくとも一緒
2022/06/08(水) 18:45:29.37ID:AiIZO1YE0
scrapyとかboto3の話もしたいなぁ
214デフォルトの名無しさん (ワッチョイ a933-Rebr)
垢版 |
2022/06/08(水) 22:58:19.98ID:9QcK/PFh0
例外処理は言語関係なく大事なので勉強してください
2022/06/08(水) 23:11:29.92ID:7ub2o1NQ0
例外処理と言っちゃうと違うんだよな
予期せぬエラーではなく、正常系の処理でも積極的に例外を使う
関数の戻り値を見て判断、みたいなことを避ける
2022/06/09(木) 00:31:03.46ID:wTBvvN970
>>198
7-zipのGUI 版の7z.exe については、以下に書いた。
773 が漏れ

【.cmd】 バッチファイルスクリプト %14 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1597442426/771-775
https://mevius.5ch.net/test/read.cgi/tech/1597442426/836

ただ本来、7z.exeはコマンド用じゃなく、画面操作用だから、
必ず、解凍先フォルダは空の状態で始めて下さい!

そこにファイルがあると、同じファイル名の場合に、
上書きしますかとか聞かれて、コマンドが止まる

だから本当は、7-zipのコマンド用実行ファイルを使った方がよいかも
2022/06/09(木) 01:13:02.50ID:vb6k1Pem0
7zaに関しては困ってなくて、7zaと同様のことがunrarでできなくて困ってた
7zaではなく7zを使えばそっちはrarにも対応してるのでunrarは不要になる

7-Zip Extraコンソール板の最新のものでもrarに対応してないのが問題
理由がよく判らない
2022/06/09(木) 08:46:42.58ID:vb6k1Pem0
class TestClass:
 pass

a = TestClass()
a.member = 1
print(a.member)

これは特にエラーもなく動く
memberはどこに記憶されとるの?
2022/06/09(木) 09:58:40.07ID:wTBvvN970
Ruby, JavaScript で言う、特異オブジェクト

そのインスタンスにだけ、外からmember が作られるが、
別のインスタンスには、memberは存在しない。
クラス内で作られたものではないから

a = TestClass( )
b = TestClass( )

a.member = 1
print( a.member ) #=> 1
print( b.member ) # エラー。memberは存在しない
2022/06/09(木) 10:15:30.67ID:vb6k1Pem0
class定義というのは、形をきっちり決めるものではなくて、
その中で変数を作ればそれはあるし作らなければ無いというだけの話か
__init__() で作ってもいいし、生成後に作ってもいい

このクラスのメンバは以下の通りです、みたいな定義がどこにも無いから変だと思った
2022/06/09(木) 11:05:11.17ID:1tSt6fQl0
>>215
パターンマッチできたし値とエラー情報をタプルで戻すのもあり
ケースによるけど
222デフォルトの名無しさん (ワッチョイ 9d97-ZxTw)
垢版 |
2022/06/09(木) 14:48:29.51ID:KIKA+I2C0
50レスぐらい前で話題になってた、メソッドチェーン風のmap/filterは、toolzのpipeを使えばできそう。
>>> from toolz.functoolz import pipe
>>> import math
>>> pipe(range(100), lambda it: filter(lambda v: int(math.sqrt(v)) ** 2 == v, it), lambda it: map(lambda v: v * 100, it), list)
[0, 100, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100]

これだとちょっとややこしいから、filterやmapをラップして、高階関数化しておく。
>>> def filter2(func):
>>>  return lambda it: filter(func, it)
>>> def map2(func):
>>>  return lambda it: map(func, it)
>>> pipe(range(100), filter2(lambda v: int(math.sqrt(v)) ** 2 == v), map2(lambda v: v * 100), list)
[0, 100, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100]

んで、このfilter2, map2と同じものはtoolz.curriedの中にあるfilterやmapで用意されているっぽい。
2022/06/09(木) 16:59:32.72ID:oBeyd70Z0
リンク貼れないんですが、
AlphaGoを模したオセロAIを作る(2): RLポリシーネットワーク
というのを検索して出てくる記事で、
学習できないという結果があります
なぜできないか、どう改善すればいいかわかりますか?
2022/06/09(木) 17:05:02.75ID:1tSt6fQl0
スレが適当でないし記事への質問なら投稿者に聞けば良いのでは?
2022/06/09(木) 17:24:01.80ID:vb6k1Pem0
オセロなんてある程度打ったら残りは完全読みだから、
計算力的に完全読みできるようになるまでの形勢判断になるんだろうな
2022/06/09(木) 17:36:53.88ID:LsKlj9I4M
>>222
toolzのpipeじゃなくてsspipeかpip install pipeで使えるpipeパッケージ使ってみて
特に後者がオススメ
2022/06/09(木) 17:39:01.04ID:2fubDR6qH
>>224
検索してみたけど、投稿者がお手上げしてるぞw
2022/06/09(木) 18:41:58.73ID:+yYG9Gwqr
alphaGOはもう古い手法だし作り方はそのへんに溢れてるんじゃないの?
昔論文読んでオセロで実装したことあるけど普通に動いたぞ
RLポリシーがおかしいのか?
2022/06/09(木) 19:11:31.27ID:pDi0khGKH
デュアルネットワークのモンテカルロさんはセルフプレイの考慮時間が長くてイライラする
230デフォルトの名無しさん (JP 0H71-ZxTw)
垢版 |
2022/06/10(金) 16:07:50.60ID:OtI7joU/H
>>226
https://pypi.org/project/pipe/
これか。良さげだね。内包表記に限界を感じたら使ってみるよ。
有益な情報をありがとう!
231デフォルトの名無しさん (ワッチョイ 6933-8oUt)
垢版 |
2022/06/10(金) 21:55:12.18ID:Shrpy6o40
pythonってインスタンス作るときにnewキーワードがないから
クラスと関数の見分けが付かなさそうなんだけどどうしてんの?
2022/06/10(金) 22:11:39.38ID:/zky+6vC0
そんなに見分ける必要ある?名前を大文字で始めるみたいな習慣はあるけど
2022/06/10(金) 23:16:33.95ID:6DkeE7zK0
vscodeが教えてくれる
2022/06/10(金) 23:22:52.93ID:KSM5RFUb0
お袋より優しいvscode
235デフォルトの名無しさん (ワッチョイ 9d97-GLPP)
垢版 |
2022/06/10(金) 23:45:51.35ID:7XjGZ8fL0
コンストラクタ(一種の関数だ)と普通の関数を区別する必要ある?
普通の関数の中でコンストラクタ呼んでて戻り値がクラスのインスタンスだったら実質似たようなものではないか。ファクトリーパターン。
大事なのはコンストラクタと関数それぞれのドキュメントと、type hintじゃない?
2022/06/11(土) 00:04:48.58ID:rnNGlre+0
戻り値が返るような自然さで生成されるクラスオブジェクトならいいけど、
なんかとりあえず空のものをnewして、それをその後ずっと使い倒す、
みたいな流儀がオブジェクト指向にあって、それだとどれがnewか知りたい
2022/06/11(土) 00:09:46.30ID:zjKZ7QUf0
Wenzel が元気すぎてpybind11の後継でnanobind というができてるそうな
238デフォルトの名無しさん (ワッチョイ f333-GGE9)
垢版 |
2022/06/11(土) 09:50:49.94ID:nz+Eexds0
>>236
>>236
> どれがnewか知りたい
何のために?
239デフォルトの名無しさん (JP 0H9f-USYz)
垢版 |
2022/06/11(土) 11:15:24.09ID:tfPbj1b+H
>>236
どれがnewかわからないと破綻するって設計がアレじゃ…
2022/06/11(土) 12:05:53.99ID:4swSPTBXM
Python以外ほとんど触ったことないけど、newの所在が分かって嬉しいのってc++のメモリ解放ぐらいじゃないの?
241デフォルトの名無しさん (ワッチョイ f333-Gp1N)
垢版 |
2022/06/11(土) 12:30:18.05ID:n44xIOE00
普通の言語だと

a = b.method() ← あっ、bはクラスなんだな って分かる

a = new b.class() ← あっ、newがあるからbはモジュールなんだな って分かる


newがないとクラスなのかモジュールなのかすら分からない
組み込みならともかく人が作ったやつだと八方塞がり
2022/06/11(土) 12:32:11.65ID:dcBTjSKMd
俺はお前のレスが分からない
2022/06/11(土) 12:38:24.57ID:dcBTjSKMd
pythonの分かりやすいパッケージ体系でわざわざコード汚さんと分からんてまじですか…
javaとか他言語なんも使えなさそうなレベル低い人に合わせてもしょうがない
244デフォルトの名無しさん (JP 0H07-USYz)
垢版 |
2022/06/11(土) 14:14:01.89ID:K+4Tu9T8H
baka = aho.shine
gomi = Unko.manuke()
ちゃんと書け
2022/06/11(土) 15:29:23.41ID:lH7yBnt7H
カッコいい
246デフォルトの名無しさん (JP 0H07-USYz)
垢版 |
2022/06/11(土) 15:31:51.53ID:I74lpP1GH
ところで
var = func()
って書けるけど、これ何かに使える? ただ書けちゃうだけ?
247デフォルトの名無しさん (アウアウウー Sa67-hiZJ)
垢版 |
2022/06/11(土) 16:52:52.16ID:h1ISo/Y7a
>>241
初心者にウソを教えるな
248デフォルトの名無しさん (ワッチョイ 6397-uj9U)
垢版 |
2022/06/11(土) 17:35:13.69ID:GYyJ8Ce20
>>246
var = func()じゃあ単に引数なし関数を呼び出してるだけじゃない?
func = some_concrete_func
みたいなのはある
デザインパターンでいうストラテジーパターンかな?たとえば、ドローツールなんかで、いま選んでいるツールに応じてマウスイベントを処理するときに、
ツールが切り替わったとき(この場合は鉛筆ツール)に、
ondrag_func = pencil_on_drag_func
と代入しておけば、マウスイベントのハンドラでは、ツールのことを知らずに、ondrag_func(x, y)とかして呼び出せる
コールバック、関数ポインタ、言い方や似たような概念はいろいろあるけど、そこそこよく使うものだね
2022/06/11(土) 19:08:07.00ID:rnNGlre+0
docoptとargparseどっちがいい?
あるいはもっといいのある?
2022/06/12(日) 15:40:11.94ID:Qy7sGzN40
docoptは、いちいちドキュメント書くのー?と敬遠してたけど、もっそい楽だった
簡単なオプションなのに最低限書かないといけないことが多い、みたいなこともなく、
シンプルなら定義も本当にシンプルで、それでいてエラー判定なんかも実装される
何かarg一つでも取るなら無条件でdocoptでいい感じ
2022/06/13(月) 22:30:00.31
くるど!
2022/06/14(火) 14:34:34.56ID:9Nu3ASAo0
os.environ['CUDA_VISIBLE_DEVICES']の質問です
無効にしてCPUを使うときは-1を使うのはいいんですが、
PCにIntelのGPU0とNVIDIAのGPU1がついていて、
GPU1のほうを使いたいと思っています
この場合='1'にすればいいんでしょうか?
それともデバイス番号とタスクマネージャーのGPU番号は一致しないことがあるのでしょうか?
2022/06/14(火) 15:59:18.51ID:D2tcxNGE0
仕事で末尾のセミコロンが無いというエラーが増えたのは絶対pythonのせい
2022/06/14(火) 16:13:32.81ID:I+kl8I350
おいおい、宗教裁判かよw
2022/06/14(火) 16:57:52.10ID:3g7jzjW90
>>252
基本的にはそうだったはず
CUDA入れてるならnvidia-smiコマンドがインストールされてないかな
それをコマンドラインから打てば確認できたと思う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況