[過去ログ] 【まず1嫁】くだすれPython(超初心者用) その59 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
743: デフォルトの名無しさん [] 2024/06/25(火) 13:26:58.66 ID:ZtCD4zFU(1/5) AAS
>>736736(2): デフォルトの名無しさん [] 2024/06/25(火) 04:15:11.46 ID:dFDrSth2(1/2) AAS
>>733
それは最初は性能の低いパソコン用だったせいで、その名前の変数が始めて出てくるとき、その名前の変数に値が設定されるときに決める構文解釈だっただけ
Pythonは作者が構文解析エンジンを作り込むのが面倒だと思っていたせいで、仕様の追加状態も構文解析エンジンをちょっとだけしか変更していない。
そんな行き当たりばったりだったためにヘンテコな仕様になっている。
C言語、BASIC、VB,Perl、シェルスクリプト、Ada言語等の影響を受けているが、手抜きのプログラミング言語のままリリースしてしまった。
Pythonの造りはtcl/ckに似ている
745(1): デフォルトの名無しさん [sage] 2024/06/25(火) 13:30:09.56 ID:ZtCD4zFU(2/5) AAS
>>742742(2): デフォルトの名無しさん [] 2024/06/25(火) 13:25:16.56 ID:PJlEmYUO(2/7) AAS
>>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 []
>>741741(3): デフォルトの名無しさん [sage] 2024/06/25(火) 09:35:15.76 ID:ZD6OkC9b(1) AAS
>>740
Pythonは(参照の)値渡し
>>737は間違いで>>739が正しい
def modify(x):
x = None
x = [1, 2, 3]
modify(x)
print(x) #この結果をNoneにできるのが参照渡し
は出来ないから参照私じゃないって言ってるんだと思うが
君は日本人か?
746(1): デフォルトの名無しさん [] 2024/06/25(火) 13:31:55.40 ID:ZtCD4zFU(3/5) AAS
>>744744(1): デフォルトの名無しさん [] 2024/06/25(火) 13:28:25.30 ID:PJlEmYUO(3/7) AAS
>>741
で、C言語だとこんな感じかと想像するが、
変数 xの値である 1 を渡すことを、値渡し、
変数 xのポインタである 0x7ffed3b1f5ac を渡すことを、参照渡しと呼んでいた。
$ cat x.c
#include <stdio.h>
void modify(int *xx, int *yy) {
printf("xx %p %d\n", xx, *xx);
printf("yy %p %d\n", yy, *yy);
int new_xx = 0;
xx = &new_xx; /* 代入により別オブジェクトを指すPython風 */
*yy = 0; /* 変更結果が返される。 */
printf("xx %p %d\n", xx, *xx);
printf("yy %p %d\n", yy, *yy);
return;
}
int main(void) {
int x = 1;
int y = 11;
modify(&x, &y);
printf("x %p %d\n", &x, x);
printf("y %p %d\n", &y, y);
return 0;
}
$ cc x.c && ./a.out
xx 0x7ffed3b1f5ac 1
yy 0x7ffed3b1f5a8 11
xx 0x7ffed3b1f58c 0
yy 0x7ffed3b1f5a8 0
x 0x7ffed3b1f5ac 1
y 0x7ffed3b1f5a8 0
>変数 xの値である 1 を渡すことを、値渡し、
>変数 xのポインタである 0x7ffed3b1f5ac を渡すことを、参照渡し
そんな事実は無い
「参照私」が出現したのはC++から
Cには値私とポインタ私しかない
749: デフォルトの名無しさん [sage] 2024/06/25(火) 14:20:46.33 ID:ZtCD4zFU(4/5) AAS
明確に参照私と言っていたのはPASCALやね
757: デフォルトの名無しさん [sage] 2024/06/25(火) 17:20:06.61 ID:ZtCD4zFU(5/5) AAS
で?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s