問題が見つかりました
私は最近、面接中に JavaScript または Python を使用して文字列を反転することを選択し、コードを書きました (間違っています)。
リーリー(1) この方法で文字列の値を変更できますか? [はい、と答えました] [間違った答え]
(2) パラメータはアドレスで渡されますか?それともコピーですか? [値を渡すと答えました。数値、文字列、タプルは値によって渡されます (不変); リストと辞書は参照によって渡されます (可変);] [答えは値によって渡され、直接変更できます] [答えは間違っています。正しいものは値によって渡されます。 、不変]
次のことを考えています
私はよく文字列を使用しますが、この問題については勉強したことがなかったので、インターネットで情報を検索しました:Python の文字列は不変型です。つまり、文字列の要素を変更するには新しい文字列を作成する必要があります。
文字列は独立した文字で構成されており、シーケンスでもあります。シーケンスの一般的な操作方法は文字列にも適用されます。
例:
スライス操作を通じて部分文字列に順次アクセスします。
文字列の長さを調べるには len() を使用します。
in 演算子または not in 演算子を使用して、文字列に特定の文字が存在するかどうかを判断します。
アクセス文字列の例:
リーリー
リーリー
変数に値を代入 (または再代入) することで、既存の文字列を「更新」できます。新しい値は、元の値と似ている場合もあれば、元の文字列とは完全に異なる場合もあります。
例:
リーリー
リーリー
繰り返しますが、文字列は不変であるため、文字列内の特定の文字を削除することはできず、不要な部分を削除した文字列を結合して新しい文字列を作成することもできます。
「Hello World!」から小文字の「l」を削除したい場合は、次のようにする必要があります:リーリー
リーリー
つまり、私が書いた逆文字列コードには何か問題があります。正しいコードは次のとおりです。
リーリーそれでは、渡された仮パラメータと実パラメータは同じオブジェクトなのでしょうか? id 関数を使用して確認することができます。まず、id 関数の公式の説明を見てみましょう。
言い換えると、
関数はライフサイクル中にメモリ内のオブジェクト obj のアドレスを返します。id 関数のパラメーターの型はオブジェクトです (Python のすべてのオブジェクトの場合、変数はオブジェクトへの参照を格納します)。次のコードを使用して検証できます:
id(obj)
リーリー
出力:
渡されたパラメータは実際には文字列オブジェクトのアドレスであることがわかります。パラメータが list または dict に変更された場合でも、出力 ID は同じになります。したがって、Python でパラメータを渡す方法は次のとおりです。オブジェクトのアドレス、数値、文字列、タプルは直接変更できませんが、リストと辞書は直接変更できます。
以上がこの記事の内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご不明な点がございましたら、メッセージを残してご連絡ください。