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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2023/07/13(木) 18:48:41.56ID:INS7SIu4
当スレに★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(超初心者用) その58
https://mevius.5ch.net/test/read.cgi/tech/1662514433/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
2024/06/08(土) 12:49:56.73ID:JJO/Gn8n
dockerがベスト
vscodeのdevcontainerこそ人類がたどり着いた最高地点
2024/06/08(土) 14:04:39.39ID:pZ+rs27B
俺もvscode devcontainerの組み合わせが良い気がする(´・ω・`)
2024/06/08(土) 14:22:11.33ID:3whGHUAW
みんなそんなdockerつかうのね
2024/06/08(土) 14:41:09.17ID:E87q1Rk2
デプロイまで考えるとコンテナにしとくのがシンプル
646デフォルトの名無しさん
垢版 |
2024/06/08(土) 14:46:38.50ID:dTYjDoY8
逆にDocker使ってない人見ると何で?って思うぐらいだよね
647デフォルトの名無しさん
垢版 |
2024/06/08(土) 15:29:59.02ID:Dxs/ulLi
自分でコード書いてる時間が一番幸せなんじゃ
2024/06/08(土) 17:55:04.64ID:Hlb2wDxo
>>644
といいかまともな開発してたらもう使うわないと環境が破綻する
649デフォルトの名無しさん
垢版 |
2024/06/08(土) 21:01:34.24ID:D2c2x+th
そんなもんデプロイ先の環境によるだろ
2024/06/08(土) 23:58:06.46ID:gE4A0CAK
くだ質ですまんが教えてください

Win11 + Python3.12.8 + vscode 環境で、
3 * 0.3 を計算させると8.99999...になってしまいます
(期待している計算結果は0.9)

是正させるためには
round(3 * 0.3 *10) / 10
をすればいいのはわかってるんですが、出来るだけコードを簡略化させたいのと、そもそも何故こんな結果になってしまうのかを出来れば知りたい、です
2024/06/08(土) 23:59:19.96ID:gE4A0CAK
ごめん計算結果のとこは0.899999...の間違いです
652デフォルトの名無しさん
垢版 |
2024/06/09(日) 00:42:23.58ID:DuD3W8cN
ttps://docs.python.org/ja/3/tutorial/floatingpoint.html
653デフォルトの名無しさん
垢版 |
2024/06/09(日) 01:03:55.23ID:KXbUABQj
デデキントの切断という話でなくて単純に整数n,mによる
n/mをサポートする型がデフォルトではないから
そういう有理数正確に扱える↓を使え
fractions -> Rational numbers
654デフォルトの名無しさん
垢版 |
2024/06/09(日) 01:19:56.30ID:KXbUABQj
不動点少数は高速でメモリ消費が少ないのでpythonのデフォルト型には似合ってるよ
でももし、こうした計算が頻回あるいは重要に行なわれるなら
デフォルトで有理数をサポートした言語 common_lisp,R,wolfram等が良いだろう
また無理数も正確に扱いたいならwolframを薦めとく。これはsin(2pi)=0を返す珍しい言語だ
2024/06/09(日) 06:20:23.00ID:zJwQQmGc
サンクス
言語仕様なら仕方ないか
仮想通貨の自動売買用にpythonを始めたんだけど、今のところ他の言語に切り替える考えはないっす
あと調べたらdecimalってモジュールもあって、これを使ってもスッキリ書けそうね
2024/06/09(日) 09:38:02.01ID:XLDZv0sl
浮動小数点数は言語仕様というと違和感があるな
どの言語でもほぼ同じ問題出るだろうし
657デフォルトの名無しさん
垢版 |
2024/06/09(日) 09:39:22.17ID:XLDZv0sl
>是正させるためには
>round(3 * 0.3 *10) / 10
>をすればいいのはわかってるんですが

こんなことしたらダメでしょ
2024/06/09(日) 10:37:28.45ID:0/tKVw6D
Decimalは使いづらいんだよね
Decimal('3') * Decimal('0.3')とかいちいちやってられん
2024/06/09(日) 11:41:31.33ID:lrgfA1Gl
継承と合成どちらを使うべきかと基準がよくわからんなぁ(´・ω・`)
2024/06/09(日) 17:04:58.68ID:Fa41Tv3c
>>658
>>> 3 * Decimal('0.3')
Decimal('0.9')
演算子オーバーロードしてるから1箇所でいい
>>> Decimal(3) * '0.3'
TypeError: can't multiply sequence by non-int of type 'decimal.Decimal'
でもこう書けないんだよな
>>> Decimal(3) * 3 / 10
Decimal('0.9')
661デフォルトの名無しさん
垢版 |
2024/06/10(月) 15:55:09.93ID:YXHAsqQy
>>> Decimal(3) * Decimal(3/10)
Decimal('0.8999999999999999666933092612')
だっさ
662デフォルトの名無しさん
垢版 |
2024/06/10(月) 16:09:43.37ID:17x/k5Bx
まじか decimal だらしねーな
お手本
[1]> (* 3 (/ 3 10))
9/10
2024/06/10(月) 17:41:53.13ID:8JGo2SkV
>>> Decimal(3/10)
Decimal('0.299999999999999988897769753748434595763683319091796875')
>>> Decimal(3/10).quantize(Decimal('0.0'))
Decimal('0.3')
エスパーしない方針だから
2024/06/10(月) 21:30:34.55ID:RgnmhcQ5
>>661
クソだっさwww
2024/06/11(火) 10:00:28.46ID:ufFRRQKE
↓俺の考えた最強のスマートな書式を語れ
2024/06/11(火) 11:06:34.00ID:GrH0S5VC
>>> Decimal('3.0')
だっさpgr
667デフォルトの名無しさん
垢版 |
2024/06/11(火) 11:19:18.72ID:GtLbEh/G
perlの2番煎じにはなるが import XXX で オーバーライドしてくれればいいね
2024/06/11(火) 20:03:54.96ID:NWbfM0Iu
C++プログラマーだが、
エディタは何使えばええの?

Visual Studioは一応動くが…
2024/06/11(火) 20:27:59.97ID:OZZ7Wa3f
汎用でつかえるのはPyCharmかVSCodeかな
用途とマッチするならJupyter/Colabもいける
670668
垢版 |
2024/06/12(水) 08:58:44.17ID:j9iMATnj
>>669
一番高機能なのはVS Codeかね?
Colabが本格開発に無理なので、探してたところ。
2024/06/13(木) 07:44:44.26ID:W4hE6ovf
環境を整え無くてもいいPyCharmが楽だな
2024/06/13(木) 13:05:54.68ID:vNUeXKFR
会社の糞PCだとPyCharmが重いんだわ
2024/06/13(木) 13:21:14.57ID:Uc7cK+cC
パイチャ!
2024/06/17(月) 12:06:22.09ID:2+GH8Qi6
モジュールAのMainクラスがモジュールBに書いたSubクラスのインスタンスを生成する
型ヒントのためにAはBの、BはAの参照するから相互参照になっちゃうんだけど
typing typechecking使えば回避できるとして

これって根本的にどう作って相互参照回避すべきなんだ?
2024/06/17(月) 12:17:35.59ID:a7DQgjMw
シチュエーションが謎で理解できてないけど
インターフェースとして上位クラスをつくる
676デフォルトの名無しさん
垢版 |
2024/06/17(月) 12:44:35.82ID:laKFnUpc
循環しちゃうのは速度落ちてメモリ消費してしまうけど記憶しといたのと照し合わせる手法がある
2024/06/17(月) 12:50:19.30ID:Me30jdtI
>>674
その状況だとBはAをインポートする必要いやろ

よくあるのはtyping用のスタブモジュールを作る方法
2024/06/17(月) 14:24:03.32ID:KAevd3qc
>>677
A.py App()
B.py Win()

winがコンストラクタでsuper().__init__(app.root)するとき
App渡せないとroot見えないって言われてしまう
2024/06/17(月) 15:22:40.07ID:Me30jdtI
>>678
その例だとWinが依存すべきなのはAppそのものじゃなく
Appが継承してる型だったり実装してるインターフェースの型
tkを例にすればWinが依存するのはAppそのものじゃなくtk.Tkやtk.Widget

AとBの相互依存から共通で依存する抽象度の高いCを切り出すことで
AはBとCに依存、BはCに依存、CはAにもBにも依存しない形になる
2024/06/18(火) 23:47:26.99ID:l8Y5coIJ
>>679
仕様上サブがメインのいくつかに依存するから丸ごと渡してたけど
rootと、必要な位存箇所だけ渡すようにすればいいのね
681デフォルトの名無しさん
垢版 |
2024/06/19(水) 07:39:14.75ID:Ml7xOhwE
__init__.py 描けば良いのに
682デフォルトの名無しさん
垢版 |
2024/06/19(水) 08:41:26.42ID:oNcSZ2Oe
C言語系は数年やっていてpythonのお勉強してるので質問させてくれ

@propertyを使用してgetter/setterを作れるのが分かりました
このプロパティをprotectedにするにはどうしたらいいですか?
2024/06/19(水) 09:10:58.03ID:Of90IDaN
>>682
この辺の話かな?
ttps://note.com/yucco72/n/nfc5ba5321567
684デフォルトの名無しさん
垢版 |
2024/06/19(水) 10:07:39.70ID:Ml7xOhwE
>>683
そいつ馬鹿やな
痒い所に手が届いてる好例なのに
2024/06/19(水) 10:48:00.65ID:EzJYrWWw
>>680
サブがメインに依存するという仕様がよろしくないんだよ
依存性の方向を一方通行にするというのがモジュール設計の大原則
686デフォルトの名無しさん
垢版 |
2024/06/19(水) 11:37:31.50ID:ANMSl1mg
>>685
そうはいってもどんな場合でも回避できるわけじゃないでしょ
うまく切り出せば回避できるかもしれないけど、見通しが悪く不自然になる場合があると思う
今自分が困ってるのは先生と生徒の関係で、先生は生徒を何人か選ぶのだけど、先生の事情もあるし、生徒のスケジュールもあるしで、
先生が生徒を選んだ後に、選ばれた生徒に先生のスケジュールはこなせるか?を確認してもらってるんだけど
かなり先生と生徒が密結合なのが避けられなくてインタフェースに切り出すと見通しが悪くなりそうなんだよね
こういう場合はどうすればいいのかな
2024/06/19(水) 19:41:52.46ID:E1qEKZbV
>>685
元の質問者だけど
今回はメインGUIとサブGUIでそれぞれ独立させて、メインGUIからサブGUIを見るだけ に作り直しました

ところで__init__.pyを書くとはなんですか?
2024/06/19(水) 22:24:53.92ID:jr8KvPbD
ctypesで構造体宣言するときに、以下のようにc側が不完全型の配列定義であった場合は、どのように宣言すればよいでしょうか。

typedef struct aa
{
uint32 eListType;
uint16 wRes;
uint16 wOdList[];
}


class aa(Structure):
_fields_ = [("eListType",c_uint32),
("wRes",c_uint16),
("wOdList",???)
]
2024/06/19(水) 22:42:47.22ID:0e7E5JVP
>>686
>先生が生徒を選んだ後に、選ばれた生徒に先生のスケジュールはこなせるか?を確認してもらってる
これもapp.rootのやつと同じで生徒が先生に直接依存する必要なくない?
先生、生徒、コース/クラス、受講、のよくあるモデル
参照じゃなくidで受け渡すことも考えるといいよ
690デフォルトの名無しさん
垢版 |
2024/06/20(木) 08:09:05.13ID:hChVJ2JT
>>687
それってpipでインストールできる?
691デフォルトの名無しさん
垢版 |
2024/06/20(木) 17:09:09.89ID:F8Q2DGBi
>>688
C の方が malloc(sizeof(struct aa) + N) みたいにやってるだろうから
とりあえず N の最大値くらい確保
692デフォルトの名無しさん
垢版 |
2024/06/20(木) 17:55:30.81ID:ZSpymqjs
>>689
直接依存する必要がないので、idを持っておけばよいということ?
確かにidから引けるdictを持っておけばよいのはそうだけど、実質的にはそれは依存関係にあって、プログラミング言語での表現の制約を回避する策にすぎないような気がするのだけど勘違い?
2024/06/20(木) 18:12:29.06ID:pudWG0gF
>>688
("wOdList", POINTER(c_uint16))

a = aa()
a.wOdList = (c_uint16 * size)()

wResがwOdListのsizeだったりするのかな?
2024/06/20(木) 23:47:51.33ID:F6VlqWlP
>>692
参照とidはカップリングの度合いの違い
直接依存する必要がないからという理由で書いたわけではないよ

片方がidだけに依存する形にすれば相互依存を解消できる
AとBの相互依存からAのidをC切り出して
AはBとCに依存、BはCに依存、CはAにもBにも依存しない形にできる

ただこういうのはプログラミング上の小手先のテクニックなのは確か
>>686の話はもっとドメインレベルでの本質的な依存関係を先に突き詰めたほうがいいと思う
2024/06/21(金) 10:29:55.02ID:M8EEKVG+
>>693
from ctypes import *
class aa(Structure):
_fields_ = [('a', c_uint32), ('b', POINTER(c_uint16))]

a = aa()
a.a # 0
a.b # <__main__.LP_c_ushort object at 0x000002033996A340>
a.__sizeof__() # 104
sizeof(a) # 16
a.b = (c_uint16 * 4)(9,8,7,6)
a.b # <__main__.LP_c_ushort object at 0x000002033996AAC0>
a.__sizeof__() # 104
sizeof(a) # 16

だめやん
2024/06/21(金) 13:07:20.00ID:tjV7APzm
>>695
そういうもんやで
sizeofの結果も自動的に変わると思ってた?
697デフォルトの名無しさん
垢版 |
2024/06/21(金) 15:09:56.96ID:M8EEKVG+
そういう問題じゃなくて
常にPOINTER型の容量分しか無いのは可笑しい
2024/06/21(金) 15:17:35.67ID:M8EEKVG+
少なくとも >>688 の質問に対して正しい答えは

from ctypes import *

class aa(Structure):
_fields_ = [('a', c_uint32), ('b', POINTER(c_uint16))]

a = aa()
a.b = (c_uint16 * 4)() # これは間違い
sizeof(a) # 16

class bb(Structure):
_fields_ = [('a', c_uint32), ('b', (c_uint16 * 4))]

b = bb()
sizeof(b) # 12

class cc(Structure):
_fields_ = [('a', c_uint32), ('b', (c_uint16 * 8))]

c = cc()
sizeof(c) # 20
2024/06/21(金) 15:45:50.01ID:K+jIH7ye
>>697
そういう問題が何を指すのか分からんが__sizeof__もctypes.sizeofもそういう仕様なんだって
Cのsizeofも同じやで

>>698
固定長にしろや!ってこと?
まーそれはそれで一つの選択肢だけど質問の答えにはなっとらんわな
2024/06/21(金) 16:03:41.50ID:K+jIH7ye
単に同じというと誤解を生むかもしれないから言い直しておくと
可変長部分のサイズがsizeofに反映されず自分で計算して別途管理しないといけないのはCも同じ
ということ
2024/06/21(金) 16:04:51.86ID:pyvrMoIs
pythonでandroidとiOSのアプリ作ってる人いる?
kotlinとswift覚えればいいんだけど、手間がかかるので
702688
垢版 |
2024/06/21(金) 19:26:17.13ID:HIobLuWQ
みなさんありがとうございます
結局固定長で適当に宣言しとけば良いってことですかね
確かにc側でmalloc使ってそうな気がします
2024/06/21(金) 21:53:29.93ID:xFZSSSbA
ちゃんと配列をやるならbuffer protocolにしたら
2024/06/22(土) 03:01:56.40ID:UT0yRehg
変数に何入ってんのかわかんなくない?
$%@使い分けるperl最強だわ
2024/06/22(土) 03:20:24.58ID:ITxAndmC
時代はタイプアノテーションなんですよ!(´・ω・`)
706デフォルトの名無しさん
垢版 |
2024/06/22(土) 09:29:12.03ID:mcK0MSE8
タイプアノテーションで思いだしたが、結局型チェック実装された?
それともそこまで効力は無い?
707デフォルトの名無しさん
垢版 |
2024/06/22(土) 09:38:48.07ID:R3uDiOs/
>>704
#&*も忘れてるだろ
708デフォルトの名無しさん
垢版 |
2024/06/22(土) 11:44:35.80ID:tVWK2T1P
>>706
Pythonの型チェックは外部ツールに任せるというのがポリシーなので標準実装されることはない
型アノテーションは厳密なチェックをするというよりは文字通り注釈としての役割が主であり、
VSCodeやPyCharmを通じて人間にヒントを与えるという点においてはそれなりに効力はある
2024/06/22(土) 13:20:16.98ID:JlqSUEN6
>>708
vscodeでさ
a.py
__init__
self.b = b.B(subclassX | subclassY)

b.py
__init__
self.subclass = subclass

こうしたとき、b.pyに動的にサブクラス型情報送りたいんだけどどうすればいい?
a.py書いたあとにb.py触りに行ったら、self.subclass以下のツールチップがXかYのものになってほしいんだけど
2024/06/22(土) 13:39:16.54ID:o/eWDsQ7
>>688 への回答として >>693 は全く不適切
判っててわざと間違ってるんだろうが全く別物
初心者に嘘を教えるのは良くない
https://ideone.com/YUADDB

#include <stdio.h>
#include <stdlib.h>
int x;
struct A {
int a;
int b[];
};
struct B {
int a;
int *b;
};
int main(void) {
printf("%zu\n", sizeof(x));
printf("%zu\n", sizeof(struct A));
printf("%zu\n", sizeof(struct B));
struct B b = {0};
b.b = (int *)malloc(4 * sizeof(int));
free(b.b);
/*
struct A a = {0};
a.b = (int *)malloc(4 * sizeof(int)); // compile error
free(a.b); // don't free (may be cause to runtime error)
*/
return 0;
}
2024/06/22(土) 16:27:25.33ID:zTNlWcoj
>>706
最新のpythonでほぼ完全なGenerics表記が実装された
これにMSの静的型チェッカーPyrightを使えば動的言語では初めてまともな型システムが実装されたことになる
2024/06/22(土) 16:39:32.42ID:HiCoQzk6
TypeScriptより優れてるってこと?そうかなあ
2024/06/22(土) 16:51:56.48ID:UT0yRehg
>>705
そうなんだ、、
勉強してくる
2024/06/22(土) 18:07:00.66ID:n3FOHUyg
>>710
flexible array memberの基本的な使い方も知らないのに
無理してレスしなくてもよくない?

C側でメモリ確保したいならこう書くんだよ
struct A *a = malloc(sizeof(struct A) + size * sizeof(int));

>>693のa.wOdList = (c_uint16 * size)()はPython側でメモリ確保する場合の話だよ
CとPythonでやり取りする時はflexible array memberのsizeも当然受け渡しする必要があるよ

こんなんで大丈夫かな?
2024/06/22(土) 21:23:10.50ID:+hHL9oAL
# ダイアログを表示する
import TkEasyGUI as eg

layout = [[eg.Input(width=9, key="pt"), eg.Text("pt", width=6, height=2), eg.Button("コピー", key="pt_copy")],
[eg.Input(width=9, key="kyu"), eg.Text("級(歯)", width=6, height=2), eg.Button("コピー", key="kyu_copy")],
[eg.Input(width=9, key="mm"), eg.Text("mm", width=6, height=2), eg.Button("コピー", key="mm_copy")]]

window = eg.Window("pt-Q-mm", layout, font=(None,14), size=(250,150))

def execute():
in_pt = values["pt"]
window["kyu"].update(in_pt)
window["mm"].update(in_pt)

while True:
event, values = window.read()
if event == "pt":
execute()
if event == "kyu":
execute()
if event == "mm":
execute()
window.close()


key="pt"の入力欄に文字が入力されると、リアルタイムに、
key="kyu"とkey="mm"の入力欄にkey="pt"と同じ文字を表示したいのですが、
def execute():をどう修正すれば良いでしょうか?

今のままだと、key="pt"の入力欄に文字を入力しても、
key="kyu"とkey="mm"の入力欄に何も表示されません…
716715
垢版 |
2024/06/22(土) 21:53:43.34ID:+hHL9oAL
JavaScriptのOnChangeみたいなのをやりたかったのですが、止めました
ChatGPTに教えてもらったコードでも、うまくリアルタイム表示出来なかったので…
「実行」ボタンを押したら、表示されるようにします
ありがとうございました
717デフォルトの名無しさん
垢版 |
2024/06/23(日) 00:28:02.79ID:2xccr50A
>>714
>C側でメモリ確保したいならこう書く
>struct A *a = malloc(sizeof(struct A) + size * sizeof(int));
もちろん知ってる

>a.wOdList = (c_uint16 * size)()はPython側でメモリ確保する場合
どこが等価なの
2024/06/23(日) 12:15:44.92ID:6BLTL9tJ
>>717
>どこが等価なの
誰も等価だなんて話はしとらんのやで

FAMを含む構造体が使われてるCのAPIを
FAMを直接サポートしてないctypesを使ってPythonから利用する話をしとるんやで

構造体のメモリをCで確保/開放する場合もあれば
Pythonで確保/開放する場合もあるんやで
(一旦コピーする場合はそれぞれでやるのもありえるんやで)

FAMの有無も違う上に
メモリ管理の方法もルールも根本的に違うCとPythonで
等価になるわけないんやで
2024/06/23(日) 12:29:27.23ID:NuUT7kNv
>688
>ctypesで構造体宣言するときに、
>以下のようにc側が不完全型の配列定義であった場合は、
>どのように宣言すればよいでしょうか。
2024/06/23(日) 12:42:53.65ID:NuUT7kNv
chatGPT の回答を改変した様な解答やね
伝言ゲームでもやってんのかな
2024/06/23(日) 19:40:41.83ID:GsZtttEh
終了までお早めに
https://i.imgur.com/f7tN1NE.jpg
2024/06/23(日) 20:12:48.30ID:nLTHI867
>>721
もう既にやっとるよ
2024/06/23(日) 20:26:42.71ID:f4WzOl4U
>>721
グロ
724デフォルトの名無しさん
垢版 |
2024/06/24(月) 00:41:26.66ID:sso3G8sO
Pythonの変数、オブジェクトは最初に設定した値でデータ型が決まるから、結局、変数の初期化のような古臭いコーティングルールがないといけない。

データ型がわからなくなったら、データ型を調べるという行き当たりばったりの言語仕様
725デフォルトの名無しさん
垢版 |
2024/06/24(月) 07:13:54.02ID:lLj5yZl4
>>724
> Pythonの変数、オブジェクトは最初に設定した値でデータ型が決まるから、

最初ってどういう意味だ。
2024/06/24(月) 08:57:31.37ID:+wQGxx+4
>>721
気軽に稼げそうでいいね
2024/06/24(月) 09:38:30.63ID:ALkJ+vo8
メソッドの引数にdictを渡してアンパックする場合しない場合の使い分けってどういう基準なんやろ(´・ω・`)
2024/06/24(月) 10:11:03.74ID:mBNYuZ1y
>>724
Pythonにおける変数、オブジェクト、値、データ型の認識が
根本的に間違ってるのでチュートリアルからやり直しましょう
2024/06/24(月) 11:25:58.61ID:ldoAoKVT
変数は任意のオブジェクトをアサインできるといっても
実際には複雑化するから最初の型から変えないよね
そこを人間が意識する必要があるってことかな
typingにつながる話
2024/06/24(月) 12:01:57.24ID:QPNUuP4k
動的言語を使えない人のメンタルモデルってこういう感じなんだな
2024/06/24(月) 12:02:51.99ID:uJ7CYiLU
pyinstallerでexe(app)化してたんだけど、長い日本語ファイル名だと失敗するね
pt.pyにしたら成功した
2024/06/24(月) 12:25:05.97ID:/T/eMsO3
>>730
Pythonが動的型なのは単にその方が処理系の実装が簡単だからで、動的型である事自体にメリットなんてないよ
スクリプトの動的なロードだとかNotebookでの試行錯誤云々というのも結局はそういう状況で静的型付けを実装するのが難しいからに過ぎない
静的型では常に型が一つに決まってなきゃいけないというのは誤解で、例えば「DataFrameに格納されうる任意の型」の型を持つ変数を使うんだよ
2024/06/24(月) 12:49:15.81ID:JonISmvT
>>724-725
あえて言えばpythonの変数の型は全てPyObject型だよ
2024/06/24(月) 16:19:00.38ID:Kheo9t7V
>>733
それは実装に使ってるC言語の型システム上での話であって
Pythonの型システム上の話ではないよね
2024/06/24(月) 19:26:23.98ID:aCWMRkK6
未だにどれかの型を返す作りが好きになれない
736デフォルトの名無しさん
垢版 |
2024/06/25(火) 04:15:11.46ID:dFDrSth2
>>733
それは最初は性能の低いパソコン用だったせいで、その名前の変数が始めて出てくるとき、その名前の変数に値が設定されるときに決める構文解釈だっただけ

Pythonは作者が構文解析エンジンを作り込むのが面倒だと思っていたせいで、仕様の追加状態も構文解析エンジンをちょっとだけしか変更していない。

そんな行き当たりばったりだったためにヘンテコな仕様になっている。

C言語、BASIC、VB,Perl、シェルスクリプト、Ada言語等の影響を受けているが、手抜きのプログラミング言語のままリリースしてしまった。
737デフォルトの名無しさん
垢版 |
2024/06/25(火) 04:20:51.69ID:dFDrSth2
関数の引数がどんな型でも参照渡しとか、アセンブラのサブルーチンよりもひどい設計なんだよなあ
2024/06/25(火) 04:37:03.65ID:mddxyJup
>>724
だからそれが嫌ならpyright使いなよ
2024/06/25(火) 08:26:43.24ID:9x+jYxZG
むしろpythonはすべて値渡しでしょ
内部的に変数の値が参照になっているだけで
740デフォルトの名無しさん
垢版 |
2024/06/25(火) 08:47:33.30ID:PJlEmYUO
>>737
オブジェクトだからどんな型でも参照渡しなんじゃないのか?
もしかして、「参照渡し」という言葉をオレが誤解している?
2024/06/25(火) 09:35:15.76ID:ZD6OkC9b
>>740
Pythonは(参照の)値渡し
>>737は間違いで>>739が正しい

def modify(x):
 x = None

x = [1, 2, 3]
modify(x)
print(x) #この結果をNoneにできるのが参照渡し
742デフォルトの名無しさん
垢版 |
2024/06/25(火) 13:25:16.56ID:PJlEmYUO
>>741
それは引数の渡し方でなく、x = Noneによって xが新たな Noneオブジェクトを指した結果じゃないかな。

$ cat x.py
def modify(xx, yy):
  print('xx', id(xx), xx)
  print('yy', id(yy), yy)

  xx = None  # 代入により別オブジェクトを指す。
  yy.clear() # 変更結果が返される。

  print('xx', id(xx), xx)
  print('yy', id(yy), yy)
x = [1]
y = [11]
print('x', id(x), x)
print('y', id(y), y)
modify(x, y)
print('x', id(x), x)
print('y', id(y), y)

$ python3 x.py
x 140253632444160 [1]
y 140253627941632 [11]
xx 140253632444160 [1]
yy 140253627941632 [11]
xx 140253637855360 None
yy 140253627941632 []
x 140253632444160 [1]
y 140253627941632 []
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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