プロが教えるわが家の防犯対策術!

Pythonで、a=str(a)と、str(a)の違いは、元のaの型が変わるかどうかでしょうか? 教えて頂けると幸いです。で、a = str(a)は、変数aの内容を文字列に変換して、再び、aに代入します。
a = 3だとすると、print(a*2)を実行すると、 33と表示されます
str(a)は、変数aの内容を文字列に変換するだけです。
a = 3だとすると、print(a*2)を実行すると、 6と表示されます。
の所の解説を教えて頂けると幸いです。
以下のURLで、
https://oshiete.goo.ne.jp/qa/13703978.html
No.2で、前者は、33で、後者は、6になるという事でしょうか?教えて頂けると幸いです。

A 回答 (5件)

「str(x) は xの内容に合わせた文字列。

xは変化しない。」
それだけのこと。

他はまったく別の話。

a=str(a)

a=a+1
とかと同じ話で、aの値を使って計算した結果をaに代入する、ということ。
Pythonでは変数自体に型がないので、整数だろうと文字列だろうと代入することができる。

str(a)

a+1
とかと同じ話で、aの値を使って計算する、けどその結果はどこにも保存されない、ということ。


その後の話は、結果どうなったを確認するもの。
変数の中身を確認するために printを使うのはよくあるけど、ただprintしただけでは 整数3 と 文字列"3" の区別がつかないので
・整数3 * 2 → 2つの整数の掛け算の結果 6 になる
・文字列"3" * 2 → 文字列の整数回繰り返しで "33" になる
というのを利用して a の型を見えるようにしたもの。
a = str(a)と str(a)の違いとは直接は関係無い

単に型まで含めた確認するのなら、 pprint を使うとかreprを使うとかの方がわかりやすいと思う。
https://docs.python.org/ja/3/library/pprint.html
https://docs.python.org/ja/3/library/functions.h …
    • good
    • 0

a = 3と初期値を与えた上でa =str(a)と文字列にした場合、a*2とすると、元の文字列を2つ繰り返して代入するとなります。


よってaの値は文字列の"33"になります。
https://www.javadrive.jp/python/string/index6.html
    • good
    • 0
この回答へのお礼

a=3, str(a)の場合は、どうなるのでしょうか?=がついてない場合です。教えて頂けると幸いです。

お礼日時:2024/01/13 15:19

>Pythonにおいては、型宣言をしない変数のデータ型は定まらないので、


>何も型宣言をせずに変数を初期設定した場合、
>設定した値を元にPythonのインタープリターが変数の型を
>推論して決めます。

いえ、型アノテーションは 今のところ pythonの実行に
何の効果もありません。

型アノテーションは mypy や vscode の pylance のような
ソース解析ツールに情報を提供するための構文です。
プログラマのコードに込めた意図とコードの食い違い(バグ)を
を検出するためのものです。

python の変数にはあらゆる型のオブジェクトが常に代入可能です。
型を持つのはあくまでオブジェクトであり、変数ではありません。
    • good
    • 0

構文的な意味で言えば


a =

a に後続の式を代入するという意味
str(a)はstr関数の第1引数としてaを渡すという意味。
str関数の実装に関する質問では無いのでそこは自分で補填してください。
    • good
    • 0

str()は、パラメータの値を文字列型に変換する関数ですので、それをパラメータの変数に返せば、その変数は文字列型となります。



Pythonにおいては、型宣言をしない変数のデータ型は定まらないので、何も型宣言をせずに変数を初期設定した場合、設定した値を元にPythonのインタープリターが変数の型を推論して決めます。

また、型宣言していない変数に別のデータ型を代入すれば、エラーを出さずに代入した型に変数のデータ型を変更します。

そのために質問のような動きになります。

変数のデータ型を固定したいのであれば、あらかじめ型宣言をしましょう。
https://qiita.com/E_taku/items/b74188d3ec3b2d236 …

なお、JavaScript(ECMAScript)も、変数などのデータ型が定まっていません。
それを是正するために、TypeScriptという型宣言を必須とする言語が作られました。
    • good
    • 0
この回答へのお礼

すみません。前者は、33で、後者は6になるという事でしょうか?教えて頂けると幸いです。

お礼日時:2024/01/13 11:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています