Pythonのお勉強 Part62

■ このスレッドは過去ログ倉庫に格納されています
2019/09/15(日) 16:06:00.08ID:E+Kc3PWT0
★当スレにRubyのソースコード類を書くことを禁ず★
☆Ruby等、Pythonではないプログラミング言語での回答類を書くのも禁止
☆「Ruby では」「Rubyでは」をNGワード登録推奨

◆エラーを解決したいときはエラー文(勝手に省略禁止)と
 環境(Pythonのバージョン・OS名・IDEの種類とバージョン)をシッカリ書くこと

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

◇Pythonオフィシャルサイト
http://www.python.org/

◇まとめwiki
ttp://python.rdy.jp/

●関連スレ●
くだすれPython(超初心者用) その44【Ruby禁止】
http://mevius.5ch.net/test/read.cgi/tech/1563969768/

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

次スレの建立は>>985あたりが挑戦する。 [EOF]
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2デフォルトの名無しさん (エムゾネ FF9f-L2cD)
垢版 |
2019/09/15(日) 17:23:36.55ID:+Psjuv8oF
O2
3デフォルトの名無しさん (ワッチョイ 9f01-e0wG)
垢版 |
2019/09/16(月) 16:01:41.11ID:pu7P8atN0
建てるのがちょっとはやくて?沈んでしまったのでageとく
2019/09/16(月) 16:37:55.80ID:YXSl1XrX0
age支援
2019/09/16(月) 19:05:56.22ID:MsYhkP050
喋るゴミがうるさいからこっちかな
2019/09/17(火) 07:13:06.28ID:oiLDvE8A0
あーゆうのは見てたくないから俺もこっちだな
2019/09/18(水) 20:15:44.72ID:Eln4Km+3M
すまん負け犬わんわんおりゅ?w

999 名前:デフォルトの名無しさん [sage] :
>>973
まwまw負け犬www
無能わんわん完全敗北ワォーーーンw
今度から格上の相手に噛み付かないよう気を付けなw

1000 名前:デフォルトの名無しさん [sage] :
はい、終わりw
2019/09/18(水) 20:29:20.18ID:CdEduQpkp
くだらん書き込みのせいでpythonの話が下火になっているな
なんでこのスレに住み着いたんだろ
9デフォルトの名無しさん (ワッチョイ 9f12-pDK+)
垢版 |
2019/09/18(水) 20:35:46.62ID:JVT+y9R+0
ガイジ2号がいつまでもガイジ1号の相手してるからだろう
どっちもプリウスミサイル叩き込んで殺した方がいい
2019/09/18(水) 21:05:01.27ID:Ei+Tp6tdM
フルボッコされて発狂してるだけだろw
2019/09/18(水) 21:07:25.51ID:WnNHWkf40
明日、ワッチョイの変化しない部分をあぼ〜ん設定して1週間放置すれば
お豆腐〜普通メンタルレベルなら消えるんじゃね?
12デフォルトの名無しさん (アウアウクー MM73-Ivwm)
垢版 |
2019/09/18(水) 23:49:13.69ID:Eln4Km+3M
>>10
わんわんでしゅか〜?wお手!w
13デフォルトの名無しさん (ワッチョイ 5197-KC02)
垢版 |
2019/09/20(金) 03:06:28.34ID:cbLpEk730
Jupyterで、
%%bashって書いたセルの一部でPythonを使うとかいうことはできないのかな。
forループとか、変数展開とか。
もちろんsubprocessで実行すればいいんだけど、シェルがメインでpythonが少しの場合、
なんかいいやり方ないかなと思って。
14デフォルトの名無しさん (ワッチョイ 4d7c-9GzD)
垢版 |
2019/09/20(金) 16:44:00.15ID:rjndmUfp0
何がしたいのかもう少しくわしく
15デフォルトの名無しさん (ワッチョイ 5197-KC02)
垢版 |
2019/09/21(土) 01:15:40.54ID:U1H67dB+0
for i in range(1, 6):
 subprocess.run(('mkdir %d_new' % (i)).split(' ')
 subprocess.run(('cp %d %d_new' % (i, i)).split(' ')
と同様のことを、
for i in range(1, 6):
 !mkdir ${i}_new
 !cp $i $i_new
みたいな感じで書けないかな、と。
これはpythonの中にbashが入ってる例だけど、逆でもいいので。
2019/09/21(土) 03:11:15.88ID:xUElhJo20
Ruby なら、こういう感じ。
ただし、、DryRun なので、実際には実行されません

Python には、Fileutils みたいな、便利なライブラリは無いのか?

require 'fileutils'

( 1..2 ).each do |idx|
FileUtils::DryRun.mkdir( idx.to_s )
FileUtils::DryRun.touch( "#{ idx }/#{ idx }.txt" )
end

出力
mkdir 1
touch 1/1.txt

mkdir 2
touch 2/2.txt
17デフォルトの名無しさん (アウアウウー Sa85-8lXu)
垢版 |
2019/09/21(土) 05:24:04.46ID:L2nY9anWa
>>15
xonsh
2019/09/21(土) 08:35:59.52ID:sgtRiYtH0
>>16
知らないのになぜ答える(呆)
2019/09/21(土) 08:56:29.85ID:809PHD3I0
>>16
rubyは聞いてないです。pythonで回答してください。
2019/09/21(土) 09:00:33.23ID:b6UCNT9id
>>18
>>19
pythonより、Rubyの方が将来性はある。
特にキャリアの初期段階では、Rubyがオススメ。
Pythonは機械学習系で人気だけど、初学者にはオススメできない。
CSを学んだ人とかには、オススメできるのかな?
KENTA氏も、そう言ってる。
2019/09/21(土) 09:36:25.49ID:l4slB5oe0
>>19
荒らしの相手しちゃだめだよー
22デフォルトの名無しさん (ワッチョイ a54e-hQOS)
垢版 |
2019/09/21(土) 10:23:45.09ID:AojYT9zq0
将来性のないプログラミング言語ワースト5
5 Programming Languages That Are Probably Doomed
https://insights.dice.com/2019/07/29/5-programming-languages-probably-doomed/
Ruby ←←←www
Haskell
Objective-C
R
Perl

KENTA「Rubyに拘泥するやつは伸びない」

嘘ばかりついてるなこの糖質ww
やはりハエがウンコに惹かれるように、
カス人間もクソ言語に惹かれるんだろうwww
2315 (ワッチョイ 5197-KC02)
垢版 |
2019/09/21(土) 10:54:29.63ID:U1H67dB+0
>>15だけど、
Jupyterにおいて、
%%bashはセル全体をbashで実行、
!はその行をシェルで実行、で、
>>15の例が実はそのまま動くってことがわかった。
確認不足で質問してしまい申し訳ない。
>>17 xonsh調べてみます。

>>16
うーん、、、、15で13だって名乗り忘れたのも悪いけど、
>>13を読んだらディレクトリを作ったりファイルをコピーしたりということは単なる例で、
言語の制御構文、変数を使いつつシェルをシェルスクリプトレベルに簡単に実行したいという質問だったんですけどね。

あなたの例はJupyter上でシェルを簡単に実行できるからJupyterの機能を使って実現したいという大前提を無視してて
単にRubyでディレクトリの作成とファイルのコピーが出来る、ってだけの例で何の答えにもなってない。
当然Pythonにもファイル操作のライブラリはあるよ。
Rubyなら出来るって思うのは勝手だが、Pythonでは簡単にできないって妄想して発言するのやめてくれないかな。
てかそんなにRubyが良いって言うなら、RubyでJupyterに相当するもの教えてもらえないかな。そうしたら日常で使ってみるから。
irbは相当しないんでよろしく。
2019/09/21(土) 11:05:54.75ID:4a5WZv9wM
プリプロセッサを作ってpythonと同名のエイリアスを作るとかなら比較的簡単そう
2019/09/21(土) 20:41:07.52ID:5TKws+Zn0
また異教徒が湧いているようだな・・・・・・
2019/09/21(土) 20:59:48.05ID:4gE2iOeh0
プログラミング言語が宗教なら、複数の言語を日常的に使ってる奴はやばいじゃん
2019/09/21(土) 23:05:30.93ID:6UrGeJMka
日本人は仏教徒とかいっても、クリスマスとかハロウィンとか祝うじゃん
それと同じことでは?
2019/09/22(日) 00:15:54.93ID:fbK9NPLj0
nullを\Nと表現しているテキストファイルがあります。
pandasのread_csvのオプションで
na_values = '\\N' と指定しても、読取後に N としか解釈されません。
なお、dtype=str としてすべて文字列で読み込んでいます。

\Nをnull扱いで読み取る方法はないでしょうか。
2019/09/22(日) 01:33:24.69ID:1ZcxgUxg0
>>27
マホメットの誕生日もお祝いしないと
30デフォルトの名無しさん (ワッチョイ 0261-tKbs)
垢版 |
2019/09/22(日) 08:05:54.77ID:Hc6O2uDq0
神道でも墓は寺にあったりするし。
31デフォルトの名無しさん (オッペケ Sr51-8lXu)
垢版 |
2019/09/22(日) 09:51:13.12ID:5WmnN11dr
状況によって使い分けるだけ
食材は包丁、紙はハサミ、木材はノコギリで切るのと同じ
32デフォルトの名無しさん (ワッチョイ 4d7c-9GzD)
垢版 |
2019/09/22(日) 13:36:11.13ID:NWulzMwt0
na_values = ('\\N',)
2019/09/22(日) 13:44:50.84ID:7LiwHA260
>>28
Ruby では、独自の CSV::Converters を定義すれば、できるけど

require 'csv'

str = <<"EOT"
"\N",1
"2",\N
EOT

proc = Proc.new do |field, field_info|
if field == "\N"
nil
else
field
end
end

options = { :converters => proc }

CSV.parse( str, options ).each do | row |
p [ row[ 0 ], row[ 1 ] ]
end

出力
[nil, "1"]
["2", nil]
34デフォルトの名無しさん (ワッチョイ 4d7c-9GzD)
垢版 |
2019/09/22(日) 13:47:39.09ID:NWulzMwt0
>>> pd.read_csv(io.BytesIO(b'abc,def,yyy\nghi,\\N,xxx\n'), sep=',', dtype=str, na_values=('ghi','\\N'))
abc def yyy
0 NaN NaN xxx

>>> pd.read_csv(io.BytesIO(b'"abc","def","yyy"\n"ghi","\\N","xxx"\n'), sep=',', dtype=str, na_values=('ghi',r'\N'))
abc def yyy
0 NaN NaN xxx
2019/09/22(日) 17:25:53.71ID:fbK9NPLj0
皆様、ありがとうございます
escape_charが邪魔していたようです
escape_char='\\'を外したら動作しました。
2019/09/22(日) 18:11:35.58ID:5MoRoXDq0
すみません、a.txt , b.txt ,c.txtといった感じで5個テキストファイルがあって
各テキストファイルには1行ずつ
2465
451
5887
と並んでいるのですが、これを各テキストごとにaリスト、bリストとリストを
一括で作りたいのですが、どうすればいいでしょうか・・。
一つだけならopenで開いてa = [ ]にappendするだけなのですが、一括でやるのがネックでして
2019/09/22(日) 18:11:40.10ID:5MoRoXDq0
すみません、a.txt , b.txt ,c.txtといった感じで5個テキストファイルがあって
各テキストファイルには1行ずつ
2465
451
5887
と並んでいるのですが、これを各テキストごとにaリスト、bリストとリストを
一括で作りたいのですが、どうすればいいでしょうか・・。
一つだけならopenで開いてa = [ ]にappendするだけなのですが、一括でやるのがネックでして
2019/09/22(日) 18:40:53.40ID:aANq22gT0
>>36-37
5回ループさせたらいかんのんけ?
2019/09/22(日) 18:44:32.08ID:aANq22gT0
>>38補足
各リスト名は入力ファイル名から拡張子とったやつに、すればいんじゃね?
でもって作成済みリスト名を集めたリストでもつくっとけ
2019/09/22(日) 19:25:51.59ID:vTpi5vA10
コマンドライン引数でループするのが成功法
2019/09/22(日) 19:44:33.01ID:5AUskteJa
>>37
glob.globをforループしたら
2019/09/22(日) 20:14:43.44ID:7LiwHA260
ホリエモンもおすすめ!人気のプログラミングキャンプの様子を特別公開
https://www.youtube.com/watch?v=Ob1SYQnc1d0

岩手県八幡平市(はちまんたいし)
参加費無料のスパルタキャンプが、10/8 12:00 まで、15名募集中!
(ただし、今年の競争率は、25倍ぐらい)

11/2 〜 11/24 の毎週土・日の8日間、8:30 〜 18:30

Python で、機械学習・LINE BOT・Django
2019/09/22(日) 20:28:10.43ID:7LiwHA260
Ruby なら、こういう感じで、5つ書けばできるけど

# 末尾の改行を削除して、配列に読み込む

a = File.readlines( "a.txt", chomp: true )
b = File.readlines( "b.txt", chomp: true )
2019/09/22(日) 20:35:47.40ID:p1u+NLfG0
一括でやる必要性の意図が全く分からんけど、下のような程度の話ならくだすれで聞いた方がいいかな

d = {}
for x in ["a.txt", "b.txt", "c.txt"]:
 with open(x) as f:
   d[x] = f.readlines()
45デフォルトの名無しさん (ワッチョイ 5197-KC02)
垢版 |
2019/09/22(日) 20:36:33.96ID:ulErh40p0
>>36
普通はリストを要素に持ち、ファイル名をキーに持つ辞書にする
texts_dict = {}
for file in ['a.txt', 'b.txt', 'c.txt']:
 with open(file, 'r') as f:
  texts_dict[file] = f.readlines()
みたいな
で、使うときはtexts_dict['a.txt']とかでアクセス
どうしても変数に直接入れたければ、
globals()['a'] = [] とかすれば a = [] をしたことと同じになるから、それで行うけど、
ファイル名が可変だったら結局globals()経由で辞書アクセスすることになるから、
普通は辞書にすると思うよ
2019/09/22(日) 20:39:26.05ID:aANq22gT0
>>45
(質問者じゃないけど)なるほどなっとく!
スマートだ > 辞書を使う方法
2019/09/22(日) 21:26:02.03ID:eV1DMGD/M
>>43
早く死ねよ
2019/09/22(日) 21:45:30.11ID:+Vq+U6PO0
だまって透明にしときゃいいさ
誰も見ないのにご苦労なこった
2019/09/22(日) 23:02:47.18ID:5MoRoXDq0
>>38-45
ありがとうございます。ちょっとやってみます
50デフォルトの名無しさん (ワッチョイ 5f05-ohPQ)
垢版 |
2019/09/26(木) 01:34:06.99ID:oHudf+NE0
すんません、Pythonに詳しい人教えろください。
アクティブウィンドウの選択テキストをPythonで取得するにはどうすればいい??
LinuxユーザPython初学者です。
51デフォルトの名無しさん (アウアウエー Sa1f-yXpG)
垢版 |
2019/09/26(木) 15:45:09.87ID:EH9TPs/Va
wmによるんじゃね
52デフォルトの名無しさん (ワッチョイ 5f05-ohPQ)
垢版 |
2019/09/27(金) 00:07:03.40ID:2McA6UJq0
よくわかりませんが、ブラウザのテキスト選択して、ファンクションキーやショートカットなどでバインド。
テキスト選択テキストをスピーチをさせたり、選択テキストをWEB検索したりとか…ファイル検索して辞書っぽい使い方とか?
2019/09/27(金) 08:50:31.85ID:AvYsaFlO0
要するにpythonでクリップボードを操作したいワケか。
linuxじゃどうやるかは知らんけど検索すればそれっぽいのが出てくるんじゃねえの
54デフォルトの名無しさん (ワッチョイ e77c-wGQq)
垢版 |
2019/09/27(金) 12:04:16.80ID:oLJPEcmZ0
漏れにはクリップボードに入る前の話をしているように見える
55デフォルトの名無しさん (ワッチョイ e77c-wGQq)
垢版 |
2019/09/27(金) 12:08:05.81ID:oLJPEcmZ0
ここの後者の内容でいけるかな
https://oplern.h%41tenablog.com/entry/2017/04/10/070433
2019/09/27(金) 12:16:32.88ID:tWSFBj5g0
Linuxは選択しただけでペースト候補になる。
2019/09/27(金) 16:20:49.29ID:f2vxlf0q0
漏れは、Ruby で、クリップボードを使っている。
Rubyから、Powershell, clip コマンドも呼べる!

クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
58デフォルトの名無しさん (ワッチョイ 274e-qPRK)
垢版 |
2019/09/27(金) 22:59:05.44ID:Z4UqEtTG0
powershell呼んでるだけだね。
今日日execできない言語なんてあるの?w

>>57
廃止予定のバッククォート失敗記法使ってるからすぐ動かなくなりそうだね。
https://logmi.jp/tech/articles/321308
それから「Backquotes」の地上げも考えていたんですけども、Backquotesをするとシェルで実行して結果を文字列で返すってやつですね。

(参加者から「いける、いける」の声)

まつもと:なんかあの辺で「いける、いける」って言ってる人がいますけど、信じない(笑)。なので、これももうちょっと先で、もう1回くるかもしれませんが、少なくとも3.0では死なないということです。


弱い頭で適当に文法決めてすぐブレイキングチェンジして動かなくなる書き捨て専用クソ言語wwwww
59デフォルトの名無しさん (ワッチョイ 87e7-M6N5)
垢版 |
2019/09/27(金) 23:29:19.09ID:N494Gtz30
論よりコード
60デフォルトの名無しさん (ワッチョイ 5f05-ohPQ)
垢版 |
2019/09/28(土) 00:21:55.10ID:H0kYzg7c0
>>55

sudo apt-get install xclip
オプション
-i 標準入力からXセレクションへコピーを行う
-o Xセレクションの内容を標準出力へ出力
-selection 出力指定なし時はPRIMARYとなる。

PRIMARY領域から画面に出力:
xclip -o -selection primary

PRIMARY領域からファイルに出力:
xclip -o > primary.txt

…………完璧過ぎる返答に漏らしました。
このスレにも口先だけのベテラン気取りじゃない方もいらっしゃるんですね。
PYTHONだけじゃなくLINUXももっと勉強します!ありがとうございました!m(_ _)m
61デフォルトの名無しさん (ワッチョイ 5f05-ohPQ)
垢版 |
2019/09/28(土) 00:23:42.56ID:H0kYzg7c0
>>57
死ねバカ
2019/09/28(土) 01:37:08.63ID:mOHVtsFt0
>>60
一言多いって言われるだろ
社会人になる前に直しとけよ
63デフォルトの名無しさん (ワッチョイ 4797-i9+B)
垢版 |
2019/09/28(土) 02:45:43.48ID:C0qDQBnO0
>>57
はやくJupyterでPythonを書く相当のことが出来るRubyのプロダクト教えてくれよ
そのコード実行するのだってJupyter的な便利なインタラクティブシェルがないと
入力もチェックもめんどくさいだろ、当然あるからそういうコード書いて使ってるんだよね
PythonとRubyの両方に精通していてRubyには将来性があるって断言するのなら
まだ実用になっていなくてもそうなりそうなプロダクトも試してたりするんだろうし
あとついでにmatplotlibとnumpy、scipy、pandas相当のものも教えてくれると助かる
2019/09/28(土) 15:09:52.03ID:JKTk1U1A0
>>60
そんなんじゃ社会人になっても業務支援しかやらせてもらえないぞ
65デフォルトの名無しさん (ワッチョイ 5f05-ohPQ)
垢版 |
2019/09/28(土) 17:22:36.20ID:H0kYzg7c0
口先だけのベテラン気取りってのが刺さったらしいな
2019/09/28(土) 17:36:04.25ID:od8auTQE0
・教えてもらいにきたくせに煽っている点
・おれの質問はハイレベルwだと思っている点
・そのくせポイントを押さえた質問文が書けず、エスパー求む状態の点
などが・・・
2019/09/28(土) 17:36:54.67ID:0FIb/jod0
無能な奴に限って業務では〜とか社会じゃ通用しないとか説教したがるからなw
2019/09/28(土) 18:33:57.07ID:od8auTQE0
謎の業務マニュアルを策定して裏マニュアルなりなんなり作られたり
デスマ炎上を作成しまくるような
ヽ( ・∀・)ノ● ウンコーの中核になるくらいなら、
きちんと回る業務支援 のほうが 10000倍くらいまし、かつ、有能だとおもうんだが。
2019/09/28(土) 21:19:41.23ID:mOHVtsFt0
Pythonスレに来てPython全く関係ない回答に完璧とか言い出してる点はまぁよしとしても
個人的にはLinuxとPythonを大文字でLINUXとPYTHONと書いてる点が気になったw
初心者なんだろうなぁ・・・
70デフォルトの名無しさん (ワッチョイ e763-94li)
垢版 |
2019/09/28(土) 21:46:10.02ID:4Lg9vq/90
COBOLとかFORTRANとかBASICとか
大文字でJIS登録されている言語を普段使いとしているのではないかな
2019/09/28(土) 22:22:03.56ID:Bvcc+55+0
>>63
遂に、VSCode の本が出た!
徹底解説Visual Studio Code、本間咲来、2019/9/27

Jupyter, Vim でも出来るけど、VSCode で良い!

Code Runner(Run Code)という拡張機能で、右クリックメニューから、コード片を実行できる。
ファイルパスが解決できない場合は、File Directory As Cwd を設定する
2019/09/28(土) 23:58:31.13ID:qhruDYhYa
Python使ってるのは初心者だの、ブロックが分かりづらいからだめとか言われたのだけど
別にダメな言語じゃないよね?
良いライブラリがあってやりたい動きをすぐに実装できるし書きやすいからこればっかり使ってるんだけどおっさんに言われてモヤモヤした…
C#、javascript、pythonしか触ってないけど、一番書きやすくてしっくりきたからお気に入りなのに。すげー悔しかった
2019/09/29(日) 00:10:46.14ID:pCkNePeqM
>>72
使ったことなくて印象で言ってるんだろ。言わせときなよ。
2019/09/29(日) 00:17:26.76ID:6iKlTSzwa
とは言えpycharmありきって感じはするんだよな
ブロックが分かりにくいってのは反論できねー
75デフォルトの名無しさん (ワッチョイ 4797-i9+B)
垢版 |
2019/09/29(日) 00:22:44.02ID:nT1w560I0
初心者向け言語だとは思ってなかったけど
(FedoraとかのインストーラーはAnacondaって名前のPythonのスクリプトだってことをかなり昔から知ってたし)
Pythonでゴリゴリ書く前はブロックがわかりにくいとは思ってたな。

かといってカッコがあるとわかりやすいのか?っていうと、
カッコがあってもわかりにくい時は結構あるって感じがするけどな。
2019/09/29(日) 01:57:16.53ID:yF2ygbXTM
初心者向けっていうか「分かりやすい」
特に配列関連強い気がする。
ライブラリ多いからやりたいことがすぐ実現できる。
ブロックはカッコ後ろ派と同インデント派があるのに比べれば「分かりやすい」
初心者向けでも要求仕様満たせてれば問題ないんじゃないの?
それで生産性高かったり引き継ぎしやすいなら最高じゃんw
言語に優劣付ける程色々弄ってきてるなら対立煽る以外では不毛な話題でしか無いかと。
2019/09/29(日) 02:07:50.07ID:9sS1uJjp0
>>72
俺おっさんだけど新人にはPythonだけ教えてる
本質と違うところで悩んで欲しくないからね

言語体系として美しさに欠ける点が多々あるのは諦めている
ブロックが分かりにくいのもあるけどスコープも分かりにくい

withやtryで字下げしてブロック作ってるのにスコープは作らないとか
普通ならあり得ん仕様だ、まぁ便利なんだけど

with open(‘hoge.txt’, ‘r’) with f:
  a = 123 ← これ、ローカル変数じゃない
print(a) ←ブロックの外に出て表示可能
結果 123

こんなこと書くとrubyくんが降臨するかな
2019/09/29(日) 08:04:21.86ID:qdFsd7WD0
>>74
ブロックについては間違ったインデントで誤認すると言うのを防ぐためのものだからそう言うのが嫌ならPythonを使うことを諦めるしかないな
if(...)
 if(...)
  a = ...
else
 b = ...

>>77
スコープはたしかに分かりにくいね
ただPythonは変数宣言がないからスコープ作るとその例だと
a = 0
with open(‘hoge.txt’, ‘r’) with f:
 a = 123 ← これ、ローカル変数じゃない
print(a) ←ブロックの外に出て表示可能
みたいな本来不要なコードを入れる羽目になるから痛し痒しだね
2019/09/29(日) 09:54:04.21ID:6bWGECfja
>>78
今時オートインデントのないエディタやIDEなんて使わんから、前に誰かも言ってたけどループ抜けた直後の処理とかインデントを手動で調整する部分は明確に劣ってると思うけどね
掲示板とかの書き込みでも仕様によっては論理構造自体把握できなくなるし
それだけをもってPythonがどうのこうのと言う気はないし好んで使ってはいるけどね
80デフォルトの名無しさん (ワッチョイ 5f33-20m0)
垢版 |
2019/09/29(日) 10:36:00.68ID:o2dHW2ZP0
Pythonに限らずインデントは整えろよ
2019/09/29(日) 10:57:44.76ID:qdFsd7WD0
>>79
> 今時オートインデントのないエディタやIDEなんて使わんから
Pythonの仕様決めた頃の話に今時とか言われても…
後付で批判できる俺スゲーってか?w
2019/09/29(日) 11:03:04.37ID:sjKzDFMja
んなこと言い出したらなんの比較もできんわ
Pythonだけ崇拝してろよ
2019/09/29(日) 14:19:19.94ID:qdFsd7WD0
お前の批判の理由がおかしいだけ
2019/09/29(日) 15:04:48.86ID:wk/e9yFta
他の言語も実用上インデントが分かりにくい状況なんかあり得ないって言ってんだけどな
そうなるとブロックの終わりが視認しづらいってデメリットだけが目立つことになるわけ
Pythonのブロックがわかりにくくないって言うなら意見の違いだから別にそれで良いけど
85デフォルトの名無しさん (ワッチョイ 4797-i9+B)
垢版 |
2019/09/29(日) 15:12:39.88ID:nT1w560I0
オフサイドルールでブロックがわかりにくいより、
ブロックスコープがないほうがよっぽどPythonの欠点だと思うんだよな

ただオフサイドルールは逆に便利なときもあるような気がするけどなー
JSとかで閉じカッコの対応がめちゃくちゃになるときよくあるもの
まぁそれは無名関数を突っ込めるからってのとも関係してるだろうし、
同一条件じゃないから単純比較はできないと思うけど
2019/09/29(日) 15:26:02.16ID:wk/e9yFta
関数が長くなってきたときとか、分岐やループで一時的にしか使わない変数名にも気を使わないといけないのは確かに面倒くさいな
スコープの仕様自体はわかりやすいんだけど他の言語で広く常識とされてる仕様とは違うからね
2019/09/29(日) 15:37:16.47ID:11si1Xxn0
if文で && って書いちゃう
2019/09/29(日) 16:19:10.31ID:qnyhMUgLp
>>86 code folding
でブロックを閉じたり開いたりすれば簡単。
Jupyter notebook なら入ってるよ。
2019/09/29(日) 17:29:15.15ID:qdFsd7WD0
>>84
>>78のコード見たらわかると思うけど正しいコードの話をいくらされても意味ないよ
他の言語はインデントとコードの意味は関係ないからインデントによって誤認する可能性があって事実それによるバグもあったのでPythonみたいな考え方が出てきたって話ね
別にそれで全てを解決するわけじゃないし色々指摘されてる通り弊害もあるのはわかってる
2019/09/29(日) 17:32:32.79ID:qdFsd7WD0
>>85
ブロックスコープは>>78の後半に書いてる通り変数宣言と絡むからちょっと難しいな
個人的にはあまり大規模なコードを書くような仕様じゃないと感じてる
2019/09/29(日) 19:57:20.42ID:0Rn4cTtQa
>>89
>>78のコードで言いたいことがわからんのだけど、elseの対応がわかりやすいってこと?それはあんまりメリットに見えないから誤解してるようだったら申し訳ない
インデントを文法に含めた時代背景とかは知らんかったから勉強になったよ
ただ、今は実用上そうする意義はあんまりないよねって言いたかっただけだから話がかみ合わなかったような気がするわ
いきなり煽られたからカッカしてたわすまんな
92デフォルトの名無しさん (ワッチョイ 4797-i9+B)
垢版 |
2019/09/29(日) 20:25:33.13ID:nT1w560I0
>>90
大改造にはなるだろうね。どんなところが問題になるか把握してないけど、
JSにES6でlet/constが導入できたみたいにPythonでも導入されるとなんとなく嬉しそうではある。
大規模なコードは書かないから個人的には問題になったことがないけれど。

元の話になったPythonディスおっさんも、ブロックスコープがない、マルチコア時代にそれを活かしづらい設計、
とか言ってディスるなら、そうですねおっしゃるとおりですという感じになるんだけどなぁ。
2019/09/29(日) 20:59:13.92ID:qdFsd7WD0
>>91
え?
elseがどのifに対応するのかぱっと見てわかるなら素ですごいと思う
ただ誰にでも君みたいな能力があるわけじゃないからインデントとブロックが合うようにしようってだけのこと
今は意味がないと言うけどみんながみんな理想的な環境使ってるわけじゃないしね
2019/09/29(日) 21:01:42.52ID:qdFsd7WD0
>>92
まあPython 2からPython 3で結構手を入れたからやれなくもないとは思うけど、変数宣言しなくていいと言うメリットを捨ててまでブロックスコープ作るのがいいかどうかは微妙だし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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