X



【まず1嫁】くだすれPython(超初心者用) その56

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
垢版 |
2021/12/27(月) 01:38:10.93ID:GepmXCuJ
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合★は、
  表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その55
https://mevius.5ch.net/test/read.cgi/tech/1633070807/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
0857デフォルトの名無しさん
垢版 |
2022/04/30(土) 08:29:49.76ID:mj6Qj3Uj
>>856
日本だと少ないとはいえ、チーム開発も少しずつ増えてきてるよな
というか規模の大きな開発が増えてきたから
型ヒント周りの機能が強化されてきてるんだし
0858デフォルトの名無しさん
垢版 |
2022/04/30(土) 08:48:06.80ID:UlwKMlAZ
YouTubeやDropboxがPythonで書かれてるけど、1人で開発されたなんて考えてんのかね、>>842

https://tech-camp.in/note/technology/45702/
DropboxのRian Hunter氏は「PyCon APAC 2013」で、Dropboxは全てPythonで開発していると述べています。コード量はサーバとクライアントのコードを全て合わせて93万7707行。
0859デフォルトの名無しさん
垢版 |
2022/04/30(土) 08:55:29.45ID:0pJ/3NeQ
一般的にpythonがーじゃなくて、そいつが職場で開発してるって条件下では大規模開発はありえないって話だろ
0860デフォルトの名無しさん
垢版 |
2022/04/30(土) 09:46:12.98ID:2kJdiTOr
>>842の気持ちはわかる
たぶんバッチ処理主体でPythonを使ってる現場なんだろうけど、バッチ処理しか書けない奴って本当に一直線のコードしか書けないのよ
最近は業務系のそういう連中がPythonに進出してきていて、なかなか酷い状況だよ
0861デフォルトの名無しさん
垢版 |
2022/04/30(土) 12:04:18.69ID:asMkUOFh
一般常識として身につけておいたほうかがいいとは思うがpandasなんかを使ったデータ分析用途の場合はオブジェクト指向は極力避けて関数とデータを意識的に分けたほうが可読性もメンテナンス性も高いよ

SeriesやDataframeのようにデータとメソッドが不可分な独自の抽象データ構造をライブラリとして提供する場合にはオブジェクト指向を使ったほうがいい
0863デフォルトの名無しさん
垢版 |
2022/04/30(土) 15:03:49.44ID:Uatckw9k
>>860
その通りです
私はバッチ処理専門で開発していますが
関数すら極力書かないようにしています
関数を作ると処理の流れが行ったり来たりして読みづらいからです
Cで言うとmain関数の中に全ての処理があるように書きます
0864デフォルトの名無しさん
垢版 |
2022/04/30(土) 15:17:02.34ID:XZrd/bpX
>>863
関数の役割分担や命名をちゃんとしてないからでは?
関数はそれ自身で責任を追って実装・検証するもの
使う側は関数内部まで気にしなくても済むようにならないと意味ない
なんで便宜上行ったり来たりは発生しない
外部ライブラリやビルトインの関数の実装までふつう追わないでしょ
0865デフォルトの名無しさん
垢版 |
2022/04/30(土) 16:40:05.60ID:wcqGltd4
>関数すら極力書かないようにしています
さすがにそれはアカン
考えを改めた方がいい
0866デフォルトの名無しさん
垢版 |
2022/04/30(土) 16:45:43.84ID:WuQ7ClRo
個別の関数をmain関数と同居させる場合、
関数の配置の順序とかあるの?
JSで関数を最後にまとめたりしているものがあったけど、
Pythonじゃ見かけないような
0867デフォルトの名無しさん
垢版 |
2022/04/30(土) 16:56:56.93ID:IElPr3np
>>863
コボラーですね分かります。
合言葉はIDENTIFICATION DIVISION。
0868デフォルトの名無しさん
垢版 |
2022/04/30(土) 17:15:45.06ID:XOEt5cKu
>>866
JSはスコープごとにスクリプトを2回読むイメージで実行されるので
関数や変数の宣言は巻き上げられて先頭で宣言されてるのと同じになる

Pythonにはそういう機能はないので1ファイルならmainの実行は最後にするのが普通

def main():
 hoge()

def hoge():
 print(‘hoge’)

main()
0869デフォルトの名無しさん
垢版 |
2022/04/30(土) 17:16:15.33ID:Uatckw9k
>>866
他の言語は知りませんが、Pythonは関数を呼ぶ処理より前に
関数定義がないといけないんですよ
だから関数のあるスクリプトファイルを開くと、まず関数の羅列が
ズラズラと目に入るわけでして、文書を上から下に読んでいくという
人間の自然な動作に合わないのです
0872デフォルトの名無しさん
垢版 |
2022/04/30(土) 18:07:46.92ID:OR8SZm5l
>>866
Python の def 文は「実行文」だから定義される関数を呼び出す前に実行しないといけないのでJSみたいにするとエラーになる
ちなみに実行文だから
if xxx:
def foo:
print('foo1')
else:
def foo:
print('foo2')
みたいにして実行時に関数の定義を変えることもできる
0875デフォルトの名無しさん
垢版 |
2022/04/30(土) 21:51:14.91ID:yu/EzU82
>>872
それ「実行文だから」とか全然理由になってない
インタプリタ型の言語ならJSでもRubyでもPHPでも全く同じことできる

実行文ではないC言語でも定義より先に呼び出したらエラーになる
0876デフォルトの名無しさん
垢版 |
2022/04/30(土) 22:12:01.94ID:o6QgUZIK
>>872
┏━━━━━━━━━━━━┓
┃The image you are       .┃
┃requesting does not exist   .┃
┃or is no longer available.   .┃
┃                        ┃
┃imgur.com             ┃
┗━━━━━━━━━━━━┛
0877デフォルトの名無しさん
垢版 |
2022/04/30(土) 22:22:35.44ID:64v4nlhT
seleniumでaタグをclickしてswitch_to.windows(driver.window_handles[1])しても<html><head></head><body></body></html>っていうページにアクセスするようになる
なんで無内容に?どうすればいいんだろう
そもそもGUI上はクリックしてないんだけどなんだこれ
0878デフォルトの名無しさん
垢版 |
2022/04/30(土) 22:23:14.79ID:OR8SZm5l
>>875
> インタプリタ型の言語ならJSでもRubyでもPHPでも全く同じことできる
やれるね、だから何?

> 実行文ではないC言語でも定義より先に呼び出したらエラーになる
コンパイル言語で定義より先に呼び出し?
実行順序とソース上の順序を混同してるだろw
0881デフォルトの名無しさん
垢版 |
2022/05/01(日) 02:13:14.49ID:b95w4aAB
>>875
C言語の場合、宣言すれば定義は後回しでOK。
0884デフォルトの名無しさん
垢版 |
2022/05/01(日) 09:40:22.97ID:0ggTu6P0
実行文って、コンパイル型言語で宣言文と区別する意味の用語だから、Pythonでは、完全にナンセンス
「実行文だから」は何の意味も持たない
実行文でない文は、逆にあるのか?
0886デフォルトの名無しさん
垢版 |
2022/05/01(日) 10:06:43.73ID:KjQtFKQ9
インタプリタだって全部の行を一行ずつ実行しながら解釈しているとは限らないんだから区別はあっておかしくない。
0887デフォルトの名無しさん
垢版 |
2022/05/01(日) 10:39:20.23ID:c1q3P+1N
宣言っていまいち意味わからんのだけど。
defは今の名前空間に新たにオブジェクト(function/callable)を作成するって捉える方がしっくりする。
だから、名前()で呼び出しするためには、その前に作成が終わってなきゃダメよね、ってなる。
って考えると、Pythonは上から下に順番に実行しかしていない、ってわかる。
0888デフォルトの名無しさん
垢版 |
2022/05/01(日) 11:07:07.83ID:IDzy7BiL
関数定義をまとめた関数をスクリプト末尾に書いて
それをスクリプト先頭で呼ぶようにすれば…と思ったけどダメですね
ズラズラ並んだ関数定義を見たくない場合、定義部分を別スクリプトにして
それをimportすればいいのかな?
0889デフォルトの名無しさん
垢版 |
2022/05/01(日) 11:28:22.49ID:UqOJOPuh
868のやり方じゃ駄目なんけ?main()の呼び出しを最後に書く以外は関数の並び順は自由だし、関数名がmainなら最初に実行されるだろうことは暗に容易に伝わる。
自分も呼び出すほうを上、呼び出されるほうを下に書くほうが読みやすいと感じるから常にそうしてるよ
0890デフォルトの名無しさん
垢版 |
2022/05/01(日) 11:54:47.68ID:IDzy7BiL
>>889
自分はメイン処理をトップレベルに書く派なので
残念ながらこの手法は使えません

しかし知識として知りたくはあります
>>868ってmain()より下にあるhoge()をmain()から呼べるってことですよね
それは何故でしょうか
0891デフォルトの名無しさん
垢版 |
2022/05/01(日) 12:26:54.53ID:Dd8WxxXv
>>890
> 868ってmain()より下にあるhoge()をmain()から呼べるってことですよね
> それは何故でしょうか
main()が(定義される時じゃなくて)実行される時はdef hoge()も実行済みだから
0897デフォルトの名無しさん
垢版 |
2022/05/01(日) 13:46:20.12ID:qrKdrkjM
どうでもいい話になってきてるような
スレタイにふさわしいと言えばそうだが
0898デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:07:59.04ID:b95w4aAB
スレタイ通り下らない話で盛り上がってて実に素晴らしい。
0899デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:08:54.21ID:QvrU5Mi0
エントリポイントのエの字も出ない
0900デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:18:30.82ID:Gwm1B3AE
>>891
実行というからおかしくなる
関数のシグニチャを評価するタイミングと
関数のボディを評価するタイミングの違い

前者が他言語でいう宣言文の役割
Cのプロトタイプ宣言とかと同じ
Pythonでも宣言として捉えたほうが分かりやすいよ
0901デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:20:32.48ID:IDzy7BiL
>>891
うーんよくわかりません
なぜ上にある関数から下にある関数を呼べるのか
私の脳はここまでです

>>892
メリットが二つあります
・スクリプトの先頭から実行が始まるので流れを追いやすい
・メイン処理の字下げが一段少なく済む
0902デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:40:33.88ID:vJsN8meg
>>901
> 先頭から実行が始まる
先頭に書いてあるのがmain関数なら上から読み下せるのは同じじゃね?
0903デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:53:14.40ID:KjQtFKQ9
うちはスクリプトの末尾にこの2行、ってのが定番たわ。

if __name__ == '__main__':
main()
0905デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:10:06.70ID:Rd1MW222
>>900
だからそんな思考回路だと
if xxx:
def foo:
print('foo1')
else:
def foo:
print('foo2')
みたいなコード見たらなんで宣言2個あってもいいんだよ?ってなるだろ
0906デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:11:46.01ID:IDzy7BiL
>>902
main関数が処理の始まりかどうかは結局下を見ないと確定しないので…
ならばトップレベルにメイン処理を書く方が安心確実と思う次第です
0907デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:15:47.63ID:4M5GqABF
def main(): hoge()
def hoge(): print(‘hoge’)
main()

Pythonの評価順は基本的に上から下に一行ずつ
1行目ではdef main():までの関数シグニチャのみ評価してボディは評価されない(それがdefの役目)
2行目も同じようにdef hoge():までの関数シグニチャのみ評価
3行目の関数呼び出し時にmain関数のボディが評価される
そのタイミングではhoge関数はシグニチャが評価され関数として宣言済みなのでhogeを呼び出せる
0908デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:20:45.71ID:Rd1MW222
>>901
Pythonインタープリターの気持ちになって考えればわかると思うよ
1: def main():
2:  hoge()

3: def hoge():
4:  print(‘hoge’)

5: main()
1を実行する時は2の内容をmainで登録する(この時点では2自体は実行されない)
3も同様に4の内容をhogeで登録する
5のmainの呼び出しで2が実行されて4が呼ばれるので実行順は1→3→5→2→4のようになる
0910デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:22:30.22ID:F/hLZDCn
>>905
宣言が2個あったところで何が問題なの?
2個あったらエラーにするルールのある言語もあるけどPythonにそんなルールない
0912デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:36:27.81ID:M2LDeL9g
これからはクラス定義もクラスメソッドも関数もごちゃごちゃにして途中でjson入れたり意味なく連想配列作ったりいきなりタプルにしたり判読し辛いコード書くことに決めた
初心者が初心者になる前に躓いて読めなくなるようにしていこう
0916デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:55:09.23ID:zrtkQxP2
javascriptは同じ名前の関数が並んでてもエラーにならないな。後ろが使われる
0917デフォルトの名無しさん
垢版 |
2022/05/01(日) 16:00:48.30ID:DfY2Iokg
グローバル変数・定数の定義とか、
場合分けしてモジュール等をインポートするときとか、
これらをサブ関数の中か、その前にグローバルで書くべきかいつも悩むわ

モジュール等のインポート
グローバル変数・定数の定義
 場合分けによるモジュール等のインポート(環境依存)
サブ関数の定義
 場合分けによるモジュール等のインポート(環境非依存)
メイン関数の定義
メイン関数の実行(>>903

これ、問題ある?
0918917
垢版 |
2022/05/01(日) 16:03:56.84ID:DfY2Iokg
グローバル変数・定数の定義なんかも
サブ関数としてまとめて定義して、メイン関数で呼び出してグローバル宣言したほうがいいのかな?
0919デフォルトの名無しさん
垢版 |
2022/05/01(日) 16:08:44.40ID:Rd1MW222
>>916
まあjavascriptはvarで同じ変数使ってもエラーにならないような言語だしね
さすがに最近はletで重複させるとエラーになるみたいだけど
0920デフォルトの名無しさん
垢版 |
2022/05/01(日) 16:30:44.75ID:6txgexSj
機能別にモジュール作って、関数詰め込んで使ってるんだが、合ってる?
0922デフォルトの名無しさん
垢版 |
2022/05/01(日) 18:43:16.30ID:CmrphzhC
自分の思い通りにソース書きたいけど仕様上書けない、どうしたらいいのって愚痴
0925デフォルトの名無しさん
垢版 |
2022/05/01(日) 21:52:03.79ID:haToe2zO
>>917
普通にモジュール分割していいなら
メイン関数は定義せず__main__.pyのトップレベルに書く
定数は定数用のモジュールを用意してimport
0926デフォルトの名無しさん
垢版 |
2022/05/01(日) 22:17:08.56ID:b95w4aAB
「オレは気に入らない」って人は生きるの辛そう。
柔軟性が無いと常に何かと戦うことになる。
0927デフォルトの名無しさん
垢版 |
2022/05/01(日) 23:58:05.46ID:Hq8ES+K0
こだわりなくてもいいとこなら別にそれでいいんじゃね
こだわらなきゃいけない事なんていくらでもあるだろう
0929デフォルトの名無しさん
垢版 |
2022/05/02(月) 13:04:57.99ID:ZthOcqCz
とにかく在日は悪いことしかしない
在日は皆殺しにすべき!
0930デフォルトの名無しさん
垢版 |
2022/05/02(月) 21:11:16.99ID:FWJ3qdnv
俺も最初の頃はこだわり持って色々なこと試してたけど結局シンプルイズベストだと気づいてさっさと書くようにしたら効率上がったなぁ

まぁある程度新しいことにも挑戦するべきだけどさ
でもセイウチ演算子の使い所がよく分からないよね
0931デフォルトの名無しさん
垢版 |
2022/05/03(火) 06:15:08.74ID:mgZ8H7hi
> でもセイウチ演算子の使い所がよく分からないよね
C言語やってたら余裕
with open("sample.txt") as f:
while text := f.readline():
print(text)
0932デフォルトの名無しさん
垢版 |
2022/05/03(火) 06:20:24.93ID:ZdlL7fiJ
それfor文より何がいいの?
というかファイルのデータなくなったらエラーでないの?
while文の終了条件がわからない
0936デフォルトの名無しさん
垢版 |
2022/05/03(火) 16:37:55.33ID:zAUrPbJb
0.1*3==0.3がFalseになるのに、0.1*2==0.2がTrueになるのはなぜですか?
0940デフォルトの名無しさん
垢版 |
2022/05/03(火) 20:19:38.25ID:zAUrPbJb
>>938
二進数だから
>>939
そうなんだけど、0.2はその誤差が何で出ないのかなってわかんなくて聞いたけど、書いてすぐわかっちゃった
0944デフォルトの名無しさん
垢版 |
2022/05/05(木) 10:24:51.52ID:vEkkTSCd
(2^((2^(35-1))-1))*(2-(2^-4060))
の計算がしたいんだが、できないのでとりあえず
2^17179869183 の計算がしたいが、

多倍長電卓LMで一瞬で解答が得られる
2^2147483647 でさえも、

ttps://paiza.io/projects/RM8L_oSwcs5_ghDFro5Sew
でも
ttp://codepad.org/ZhAiGY69
でも
ttps://ideone.com/TeJEDo
でもタイムアウトして困っています。
0952デフォルトの名無しさん
垢版 |
2022/05/05(木) 18:05:45.24ID:vEkkTSCd
>>949-950
カレットが使えないんじゃないかな?
計算結果が違っている。
ttps://ideone.com/SNjYuo

**で置き換えてみたがランタイムエラーになる。
ttps://ideone.com/F2N5yS
ttps://ideone.com/WUSd0H
0953デフォルトの名無しさん
垢版 |
2022/05/05(木) 19:04:52.15ID:h3TBoBMl
元の式をコピペして動いたと思っちゃった。
確かに ** にしないと計算結果違っちゃうね。
python の int は多倍長計算してくれると思ってたけど
上限あったのね。勉強になったです。
レス数が950を超えています。1000を超えると書き込みができなくなります。

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