Pythonのお勉強 Part71

■ このスレッドは過去ログ倉庫に格納されています
2023/09/20(水) 09:13:41.41ID:u6xixiUt0
↑スレ立てる毎に減るので、減ってたら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/
※前スレ
Pythonのお勉強 Part70
https://mevius.5ch.net/test/read.cgi/tech/1677856680/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2023/11/06(月) 09:12:57.41ID:tszvNtiA0
jpgファイルをドラッグアンドドロップしたら
処理するってつくりたいんだけど
winだとコマンドプロンプト経由じゃないとダメ?
PYファイルじゃむり?
2023/11/06(月) 10:15:00.39ID:48qtdwXca
python(。えxぇ)じゃなくて
pythonw(。えxぇ)の方を使う
2023/11/06(月) 15:06:07.26ID:IA199WY/0
ちんこ痒いの病気かもしれん
2023/11/08(水) 12:54:07.78ID:EPzAmPS60
Pythonは対話型で学習しやすいのでPythonを学ぶというよりはプログラム初学に向いてる
コンパイルせず即実行できるのが便利なだけ…かな
京都大学では1回生の学生向けにプログラムの授業を行ってるが
X=X+1を方程式と勘違いしてこの方程式は間違ってるとかどうやって解くの?という学生が多い
プログラムでは変数として使うという風に説明する。Pythonならたった数行だけでどういうものかわかるのでやはり初学者向けといえる
578デフォルトの名無しさん (ワッチョイ c551-ZTan)
垢版 |
2023/11/08(水) 13:26:28.57ID:82yhyslz0
=を本来の意味と違う意味で使ってるんだからそりゃ間違ってると思うわな
プログラム言語作ったやつが悪い
2023/11/08(水) 13:31:21.96ID:M+eAhKpj0
lispのように
(set a 3)
の方がよかったか?
2023/11/08(水) 13:35:14.32ID:o1wz1QuQa
CS知ってればそんな勘違いするはずないんだけどな
数式をメタファーとして用いてるが関数型言語でもない言語は数学とは全く違うってことが理解できてない
CSは中学生から必要
581デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/08(水) 15:55:32.78ID:0RzzgATi0
>>577
その話題のおかげで久しぶりにPythonを触ってみようという気になった。
例えば2^16倍精度浮動小数点数の最大値を計算するのに、Python3のDecimalではEmaxを最大にしても桁あふれするが、
Mpmathを使う以外にもPython2のDecimalが使える。
そのDecimalの書き方でもともとやっていた書き方よりも短く工夫できた。
2023/11/08(水) 17:45:04.49ID:EFPFqmm90
Incoぽ?ち
2023/11/08(水) 22:59:11.98ID:EduYhT2N0
>>574
Ruby で説明すると、

デスクトップにショートカットを作って、
例えば、コマンドプロンプトでRubyを起動するなら、リンク先を以下のように設定する

C:\Windows\System32\cmd@exe /k "ruby C:/Users/Owner/Documents/a.rb"
ただし、@はドットに変えて下さい

コマンドプロンプトを経由しない場合は、
直接Rubyの実行ファイルがある絶対パスを書く

C:\Ruby25-x64\bin\ruby.exe C:/Users/Owner/Documents/a.rb

これで、Drag & Drop したファイルパスが、
a.rb の中で、ARGV[ 0 ] に入ってくる
2023/11/08(水) 23:01:59.61ID:rOfRZ5Bf0
Goだと?
2023/11/08(水) 23:05:05.88ID:hH3k8goZ0
関連?スレか

「京大生でもx=x+1が分からない」、喜多教授が明かすPython教育の実態 ★3 [少考さん★]
http://asahi.5ch.net/test/read.cgi/newsplus/1699429080/
2023/11/08(水) 23:10:06.00ID:rOfRZ5Bf0
=を等しいという意味だとしても、1+1=2を無批判に受け入れるのはおかしい
1+1=1+1は正しい
1+1と2は明らかに違うもの
2023/11/08(水) 23:26:13.31ID:HvIjZsS8d
Python世界だともう少しややこしく
確か256以下は同じになるんじゃなかった?
2=1+1は正しい
2000=1000+1000は間違い
とかなんとか
2023/11/08(水) 23:29:18.59ID:lU2++3tG0
やはりPythonでも代入は:=にすべきだったな
2023/11/09(木) 05:37:23.81ID:u7A0OM5bM
>>574
送るからも余裕
argparseが役に立った
2023/11/09(木) 05:40:30.95ID:u7A0OM5bM
>>585
分からないんじゃなくて知らないだけだな
2023/11/09(木) 07:11:40.89ID:i4b+P9OO0
=使わずに:=だけ使っても書ける?
2023/11/09(木) 07:14:51.81ID:i4b+P9OO0
書けないな
ifの中に無いとSyntaxErrorになる

ifの中にあっても無くてもよくて代入結果が評価可能になるだけ、という演算子でも良かったのに
2023/11/09(木) 10:07:00.20ID:Wk14M+OK0
>>586
そんなもん文脈次第であって何も注釈がなければ式の値で比較するのが普通だろうよ
2023/11/09(木) 10:38:26.14ID:i4b+P9OO0
1+1=2を習う時点で批判的思考ができる奴は少ないので、
こうなんだと言われたらそうなんだと丸呑みしてるだけ
そのまま現在に至る
2023/11/09(木) 10:46:29.67ID:Wk14M+OK0
偉そうな事言ってるだけでなんの反論にもなってない
2023/11/09(木) 10:47:28.47ID:i4b+P9OO0
反論?
教導だよ
2023/11/09(木) 10:56:43.22ID:Wk14M+OK0
偉そうな事言ってるだけでなんの教導にもなってない
2023/11/09(木) 11:37:06.85ID:gopD44tH0
x=x+1くらいは1度説明したらすぐわかるやろ
学生よりも京大の教授がこのレベルというのが衝撃的
日本が沈没するわけだわ
599デフォルトの名無しさん (アウアウウー Saa5-CWlg)
垢版 |
2023/11/09(木) 12:09:23.93ID:Fo7n9qIpa
単に記号の問題なので
x := x + 1
でも
x :~ x + 1
でも
x <- x + 1
でも
x ← x + 1
でもなんでも良い
手間がかからないのが
x = x + 1
それだけ
600デフォルトの名無しさん (アウアウウー Saa5-CWlg)
垢版 |
2023/11/09(木) 12:10:16.09ID:Fo7n9qIpa
>>595 >>597
古典数学は 1+1=2 をそのまま受け入れる
現代数学は 1+1=2 を疑いその証明から始める
2023/11/09(木) 12:18:15.60ID:Wk14M+OK0
それは>>586
>1+1=1+1は正しい
>1+1と2は明らかに違うもの
と繋がるの?
2023/11/09(木) 12:49:40.60ID:Nh0igmG80
guido氏が来るぞ
https://pyconjp.connpass.com/event/301716/
603デフォルトの名無しさん (アウアウウー Saa5-CWlg)
垢版 |
2023/11/09(木) 13:11:26.45ID:Fo7n9qIpa
>>602
灯台ωωω
2023/11/09(木) 13:15:59.83ID:i4b+P9OO0
代入が := で、比較が == なのに、= も使う言語がある
= も比較で、文字列の大文字小文字を無視するという違いがある
605デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 14:24:11.67ID:iUBVM1B70
>>602
PyPyの例えば2.7.13ではDecimalで桁数が10^10^5程度まで数値が扱える(最大値は不明)が、
Python3のDecimalでは桁数が999999999999999999までしか数値が扱えない。
この点を今後どうするのか聞いてほしいな。
2023/11/09(木) 14:53:50.44ID:Wk14M+OK0
ID:Fo7n9qIpaもID:i4b+P9OO0も話を放りだしちゃったな
2023/11/09(木) 15:02:43.48ID:Fo7n9qIpa
import decimal
decimal.getcontext().prec = 15
608デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 15:11:21.88ID:iUBVM1B70
とりあえずPython3でもMpmathでprecを巨大にすれば巨大数が扱えて誤差は出ないようだが、
検算にPython3のMpmath、計算にPyPy2.7.13のDecimalを使っている。
環境が異なるために1つのプログラムで検算までできないという問題点がある。

ちなみに2^128倍精度浮動小数点数の最大値の計算をするときには、
PyPy2.7.13のDecimalではprecを1000に、Python3のMpmathではprecを10000とか100000とかにしないと誤差が出る。
2023/11/09(木) 15:14:41.36ID:Wk14M+OK0
>>607
>>600-601の続きはなし?
610デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 15:21:06.86ID:iUBVM1B70
>>608
今はMpmathのprecは1000で誤差は出なかったかも?
先頭から100桁程度までしか確認していないので何とも言えないが。
611デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 15:31:52.00ID:iUBVM1B70
python3では
getcontext().prec = 1000
getcontext().Emax = 999999999999999999
まで、
PyPy2.7.13では
getcontext().prec = 1000
getcontext().Emax = 10**10**5
程度まで、Emaxを10**10**6にするとエラーになる。
612デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 15:54:04.12ID:iUBVM1B70
mpmathでprecが1000での実行結果

2023-11-09 15:40:37.341115
8.693707727864259530039258884770161044063845806590697696822196758051010321507084364738474185393716049143428269592664416299506985821607020...
e+258313751232903212140244172706732768962283773495639777019746650509389263410185892774365178070439343470463409842392677007886631633129570799399839688363235723
2023-11-09 15:40:37.821113
0:00:00.479998

mpmathでprecが100での実行結果

2023-11-09 15:40:42.917141
1.73874154557285190600785177695403220881276916131813953936443935161020206430141687294769483707874321
e+258313751232903212140244172706732768962283773495639777019746650509389263410185892774365178070439343470463409842392677007886631633129570799399839688363235724
2023-11-09 15:40:42.969102
0:00:00.051961

precが100だと明らかに誤差がある。これも問題。
前者は先頭から100桁程度までと桁数は正確なのを確認している。
613デフォルトの名無しさん (アウアウウー Saa5-CWlg)
垢版 |
2023/11/09(木) 16:07:17.61ID:Fo7n9qIpa
>>609
ごめん >>601 が何を言いたいのか判らなかった
2023/11/09(木) 16:16:09.89ID:Wk14M+OK0
>>613
>>586から読み直して
615デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 16:16:32.99ID:iUBVM1B70
>>602
PyPyのDecimalの誤差の問題は言いにくいが、Python3のDecimalの桁数限界の問題は言っても良さそうだよな。
Python3で動くMpmathの誤差の問題についても言っていいのかな?

Pythonの計算能力は非常に高いので高く評価できる。そのことも言っておきたい。

あとMSのVscodeからダウンロードできるPythonではいまだに3.10が使われているが、なぜまだ3.11や3.12にならないのか?も。
616デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 16:33:36.64ID:iUBVM1B70
こういう計算ではprecを大きくしないと誤差が出る。
また、2^16倍精度浮動小数点数の最大値あたりから桁数が999999999999999999を超えてしまいPython3のDecimalではオーバーフローする。
https://ideone.com/B7quXx

2^256倍精度浮動小数点数の最大値は計算してみたが、2^512倍精度浮動小数点数の最大値は未確認。
617デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 18:53:31.64ID:iUBVM1B70
Python2のDecimalのEmaxの最大値はたぶん10**999999
https://paiza.io/projects/_3oy4rG43bzr-zUb-bO3CQ

これを超えてもエラーすら出ないが計算結果も出ないのでたぶん最大値。
618デフォルトの名無しさん (ワッチョイ 4910-ZTan)
垢版 |
2023/11/09(木) 18:54:46.14ID:iUBVM1B70
書くのが面倒くさいので10の指数表現にしてしまったので、実際にはもっと大きいかも?
2023/11/10(金) 15:53:55.15ID:5sYei61M0
>>585
xなんか使うからややこしいだけでnum=num+1にしたら誰でもわかる
620デフォルトの名無しさん (ワッチョイ 2e46-tR/v)
垢版 |
2023/11/10(金) 16:33:17.33ID:FbH8Mxce0
ヌムって何
2023/11/10(金) 19:08:35.02ID:smhSXpZ/0
変数か定数かにざっくり2種類に分かれるので、
xとかvarならいいけど、numと書いてしまうとそれは定数
622あぼーん
垢版 |
NGNG
あぼーん
2023/11/11(土) 10:26:25.79ID:HDC3RNtv0
>>622
こういう方法もあるんだな
2023/11/13(月) 22:27:11.06ID:V0ByRftD0
paths = list(Path('/content/drive/MyDrive/StableDiffusion/').glob(r'*.*'))
paths.sort(key=os.path.getmtime, reverse=True)

for file in paths:
print(f'{file.stat().st_mtime:.0f} {file.name}')

というプログラムで、フォルダ内の画像を作成日時順にソートできたのですが、
ここの中から上位10個を取り出してそれぞれ関数に入れたいのですが、
どのような手法でやったらいいのでしょうか?
(例:001.png→data1,002.png→data2へのような形にしたいのです。)
よろしくお願いします。
2023/11/13(月) 23:08:29.99ID:hIb2N2Ge0
>>624
https://docs.python.org/ja/3/library/stdtypes.html#list.sort
ソート載ってたこの文書にスライスってのがあるのでそれで取り出しはできる
端から公式文書に目を通すつもりないならChatGPTさんに聞くのもいいよ
2023/11/14(火) 00:03:28.13ID:3XtDLzP+0
>>625
㌧クス
公式ドキュメントは頭から抜けてたわ・・・
申し訳ない。
色々検索しても出てこなかったからどうしようかと思ってたので質問しました。
2023/11/14(火) 00:35:16.33ID:c91qDKwg0
>>622
コスパ良いポイ活だな
2023/11/14(火) 00:44:14.40ID:eAuNTGnN0
こいつ自演レス2回やるようになったんだな
以前は1回だった
2023/11/14(火) 01:34:46.08ID:KAjgCxWWM
>>624
画像ファイルを関数に入れるってどういう意味?
2023/11/14(火) 09:59:04.47ID:POS4QBLh0
スライスはpython入門の1時間目でやるだろ
2023/11/14(火) 12:04:58.19ID:a6f/tVQx0
>>629
パスを渡すってことだろ
逆になんでそれくらい読み取れないんだ?
632デフォルトの名無しさん (ワッチョイ 9f7c-gFzT)
垢版 |
2023/11/14(火) 19:06:35.65ID:xujXPfzz0
>>631
画像のバイナリを関数に渡すって考える方が普通じゃ?
2023/11/14(火) 19:12:22.18ID:POS4QBLh0
そんなアホな取り回しはせんやろ
2023/11/14(火) 20:05:40.30ID:lvDQJ2KR0
ワロタw
2023/11/15(水) 08:14:14.82ID:PY3kt1RSH
そもそも10個の関数を順番に呼び出す仕組みがPythonにはないよね
2023/11/15(水) 08:38:19.84ID:+heJlrgN0
>>624に書いてある、data1というのは関数名なのか
命名のセンスが悪い
637デフォルトの名無しさん (ワッチョイ 9f46-uMtu)
垢版 |
2023/11/15(水) 10:00:41.77ID:4ca/PT+K0
>>635
それが出来ない言語は無いのでないか。

> そもそも10個の関数を順番に呼び出す仕組みがPythonにはないよね
2023/11/15(水) 11:08:40.78ID:t2csacDc0
>>635
4つほど思いつくが
>そもそも10個の関数を順番に呼び出す仕組みがPythonにはないよね
2023/11/15(水) 11:11:13.85ID:+heJlrgN0
似たような関数が並んでるなら引数でどうにかするし、
全然違うのならテーブルで並べるか、シーケンシャルに書いちゃうか
全部画像を処理するんだから、似てると思うけど
2023/11/15(水) 15:31:22.25ID:PY3kt1RSH
>>638
あるの?
だって10個の関数だよ
同じ関数を10回呼ぶのと違うよ
例えば関数名がdata1~data10だとして、
この10個の関数に各々別のパス名を引数に渡しつつ順に呼べる?
2023/11/15(水) 15:38:36.15ID:/tSVEj7/0
そんなことする必要ないことに気がついてくれ
2023/11/15(水) 15:44:53.45ID:VGv7kGCa0
仮にやりたいって話でしょ
Pythonは関数もファーストクラスだから余裕
2023/11/15(水) 17:45:49.81ID:olanfxkjd
# 超適当に答えてみる
def data1(path):
 pass

paths = ["path1.txt","path2.txt","path3.txt",]
datas = [data1,data2,data3,]

# こっちはべた書き
data1(paths[0])
data2(paths[1])
data3(paths[2])

# こっちはグルグル
for data,path in zip(datas,paths):
 data(path)
2023/11/15(水) 20:01:43.64ID:qjPY1w3P0
配列定義する手間で全部書けるだろなにがしたいんだ
645デフォルトの名無しさん (ワッチョイ 1f27-XI6K)
垢版 |
2023/11/15(水) 21:38:54.96ID:SiUAlBQI0
>>629-643
624です。
Lineを使ってStableDiffutionで作成した画像をソートして作成日時が新しいもの10個を自分用に送り付ける方法を考えてました。
んで、関数の話としては>>643のべた書きが近く・・・というかまんまで、文字通りべた書きで10回処理を行いそれぞれ別関数へ突っ込んでます。
本当はもっといい処理方法あると思いまが、あまりプログラム系は触ったことがなく、自分でできる範囲で最適化するつもりです。
>>629 の画像ファイルを関数に入れるに関しては、
im1 = Image.open(data)
という処理を別でやっており、10枚の画像ファイルを、2列5行の画像ファイルで書き出して送信するするつもりです。(ランダムで10枚を1枚にしてLineに送る処理はできたので・・)
LINE NotifyやLineAPIを叩いても、複数画像をまとめて送る手法がなかったので、1つの画像で送る方法をとっています。
で、そのプログラムですが以下のようになってます。
(Google Colabで実行)
from pathlib import Path
import os
paths = list(Path('/content/drive/MyDrive/StableDiffusion/').glob(r'*.*'))
paths.sort(key=os.path.getmtime, reverse=True)
for file in paths:
print(f'{file.stat().st_mtime:.0f} {file.name}')
print (paths.sort)
l_reversed = paths[0::-1]
l2_reversed = paths[1::-2]
l3_reversed = paths[2::-3]
print (l_reversed)
print (l2_reversed)
print (l3_reversed)
このプログラムでソートした上から3つを取り出せたのですがいかがでしょうか。
また、
for file in paths:
print(f'{file.stat().st_mtime:.0f} {file.name}')
の処理があまりよくわかっていないのですが、
これは、for file in pathsでフォルダ指定したフォルダ内の全ファイルに対して、{file.stat().st_mtime:.0f} で更新日、{file.name}でファイル名の表示で会っていますでしょうか。
それか、ほかにもっとスマートな手法ありますでしょうか。 よろしくお願いします。
2023/11/16(木) 00:51:14.98ID:Q2M7jM7u0
たぶんやりたいことはこんなかんじだろ

for i in range(10):
eval("data" +i)(paths[i])
2023/11/16(木) 01:17:55.83ID:YpHIXhGK0
>>645
from pathlib import Path
import os
paths = list(Path('/content/drive/MyDrive/StableDiffusion/').glob(r'*.*'))
paths.sort(key=os.path.getmtime, reverse=True)
for file in paths:
print(f'{file.stat().st_mtime:.0f} {file.name}')
print (paths.sort)
l_reversed = paths[0::-1] <- ここと同様に似た部分は重複処理なので値の変化量を保存する処理にするともっと良くなるかも
l2_reversed = paths[1::-2]
l3_reversed = paths[2::-3]
print (l_reversed)
print (l2_reversed)
print (l3_reversed)
648デフォルトの名無しさん (アウアウウー Sae3-Xzxn)
垢版 |
2023/11/16(木) 10:39:16.68ID:QXdh7keCa
print (l_reversed)
print (l2_reversed)
print (l3_reversed)
かっこわるい
2023/11/16(木) 11:03:41.52ID:pvCpT+Yld
もしかして、
「関数」じゃなくて「変数」だったり?
2023/11/16(木) 13:24:54.46ID:eCSrCCxs0
>>645
>>563 急がば回れの典型
2023/11/16(木) 17:03:02.71ID:1QM1kixjd
l_reversed = paths[0::-1]
l2_reversed = paths[1::-2]
l3_reversed = paths[2::-3]

こんな書き方してるのに
> ランダムで10枚を1枚にしてLineに送る処理はできたので
ここまで辿り着けたのがすげぇ

ランダムのソースコード(I/F部分だけでも)を貼ったら、答えがすぐ返ってくると思う
他の部分もめちゃくちゃ言われるだろうけど、そっちはお勉強ということで
2023/11/16(木) 17:12:01.88ID:KD9PIbB20
このプログラム系の知識感でAPI叩いてるってのが逆にすごい。
2023/11/17(金) 00:14:30.55ID:7IofKhtq0
subprocessとsubprocess.PIPEを1行でimportする方法ってある?
2023/11/17(金) 09:10:23.93ID:40Zys+6x0
import subprocess; from subprocess import PIPE て事ではなく?
655デフォルトの名無しさん (アウアウウー Sae3-OPKY)
垢版 |
2023/11/17(金) 10:18:44.46ID:BqbQlbW7a
inport subprocess
だけでよくね?
656デフォルトの名無しさん (ワッチョイ ff46-uMtu)
垢版 |
2023/11/17(金) 11:02:23.16ID:HkmKeaDT0
>>655
許せない。。

>>> inport subprocess
File "<stdin>", line 1
inport subprocess
^
SyntaxError: invalid syntax
>>>
2023/11/17(金) 11:28:45.83ID:180/RciHd
もちつけ
>>> import subprocess
>>> print(subprocess)
<module 'subprocess' from '.../subprocess.py'>
>>> print(subprocess.PIPE)
-1
658デフォルトの名無しさん (ワッチョイ 1fb1-u6Hu)
垢版 |
2023/11/17(金) 13:19:32.60ID:FFgkWy7J0
使えなくなるまで
os.system()を使います><。
2023/11/17(金) 15:17:29.47ID:Y0aXBNXC0
>>654
1ステートメントと言うべきだった
importを2回書くしか方法がないなら2行にしとく
Rustのuse std::io::{self, Read};みたいなのをイメージしてた

>>655
PIPEやDEVNULLで十分なところを
subprocess.PIPEやsubprocess.DEVNULLとするのは
書くのも読むのも辛い
少し凝ったことをすれば何回も使うからね
2023/11/17(金) 22:22:21.30ID:i6SiN6NQ0
>>659
別のモジュールで同じ名前の関数なんかもあるので
せめて明示的に別名にして使ったほうが良くないかい?
661659ではない (ワッチョイ 6e46-eNDp)
垢版 |
2023/11/18(土) 03:49:04.58ID:0Uy+05Nv0
>>660
import subprocess {self as sp, PIPE as spp}
みたいにして、subprocessとsubprocess.PIPE各々を別名にして、1ステートメントでimportする方法ってある?
2023/11/18(土) 07:14:32.15ID:kMLLK9REH
>>661
無理でしょ
subprocess に別名を付けるには import
subprocess.PIPE に別名を付けるには from import
import と from import は別の構文だから並べられない
2023/11/18(土) 08:04:12.74ID:Kfn2l2LH0
可読性を犠牲にしてまで1行にこだわるのかが謎だ
664デフォルトの名無しさん (アウアウウー Sa85-UHOz)
垢版 |
2023/11/18(土) 17:02:58.33ID:rXJKESWNa
from subprocess import *
665デフォルトの名無しさん (ワッチョイ 6e46-4xZ8)
垢版 |
2023/11/18(土) 17:19:32.77ID:gr23gvrO0
>>664
>>653 の要件を満たさないのでは。

>>> from subprocess import *
>>> dir(subprocess)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'subprocess' is not defined
>>>
666デフォルトの名無しさん (ワッチョイ 8690-tE+F)
垢版 |
2023/11/18(土) 20:47:54.52ID:fIOteNuc0
>>654の回答では気に入らず、>>661を望むとは
理解しがたい。

好きなだけ自分の望む書き方を、ひとりで探求すればいい。
667661 (ワッチョイ 6e46-4xZ8)
垢版 |
2023/11/18(土) 21:57:39.08ID:gr23gvrO0
>>666
>>653 の中の人は納得したんじゃないの。
「1行で」という命題に対する >>654 の回答は、

printf("hello, "); printf("world"); printf("\n");

みたいで、オレはナンダカナーと感じるけれど。
668デフォルトの名無しさん (ワッチョイ 29b1-ettz)
垢版 |
2023/11/18(土) 22:09:39.15ID:2M9ZJit40
昔パールを初めてやってた時

open($fp,"/bin/ls | ") || die 'cant open /bin/ls';

while(<$fp>){
print;
}

close($fp);


これスゲーって思った。

コマンドをパイプつきでオープンして、while文で読み込むって。

でもパールはダメだ、見切りを付けてpythonに移った。

久し振りすぎて、上の書くのも苦労したww
2023/11/18(土) 22:57:41.75ID:STIOjWGd0
pythonでも似たようなことやるがな
670デフォルトの名無しさん (ワッチョイ 29b1-ettz)
垢版 |
2023/11/18(土) 23:18:59.79ID:2M9ZJit40
え、できるの?知らんかった。
2023/11/18(土) 23:26:44.76ID:STIOjWGd0
話題のsubprocess.PIPEにstdoutを流す
672デフォルトの名無しさん (ワッチョイ 29b1-ettz)
垢版 |
2023/11/19(日) 00:05:14.88ID:B+HVId7D0
まあ、そりゃそうだけど。

perl の open()関数でコマンド起動してファイルを読み込むのと同じ仕様で書けるって
力技感一杯じゃんw
2023/11/19(日) 02:07:38.68ID:S9/JwIsQ0
>>667
最初、改行文字の節約って思ったけど、
セミコロン+スペースと変わらんもんなぁ
LFなら改行のほうが少ないし

pythonは行あたり80文字という一応の目安を文書化した言語だから、
改行に抵抗がない人が多そうだけど、そうでもないのかな?
674デフォルトの名無しさん (ワッチョイ 6e46-4xZ8)
垢版 |
2023/11/19(日) 07:30:36.55ID:vAXGDL640
>>673
敢えて利点を挙げるなら、
import urllib2.{Amodule, Bmodule} # Rust風?
と書ければ、キーワードが集約されるので、
import urllib2.Amodule
import urllib.Bmodule # 「2」字脱落
みたいな片ちんばな誤記にならない。
from urllib import Bmodule と誤記して、Bmodule.same_function() を呼ぶと、
urllib2 の関数を扱っているつもりが、実は
urllib を使用していたという、自分では解りにくいミスになるかも。
なまじ Amodule はマトモなので、思い込みに泣く。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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