文字列は不変であり、変更することはできませんが、あなたが何をしようとしていることのいずれか可変オブジェクトでは動作しませんので、可変性(またはその欠如)は、ここでは赤いニシンの何かです。
本当の理由は、PythonがExcelのように動作しないということです。オブジェクトは、そのオブジェクトに対して実行されたすべての操作を覚えておらず、その中に入った情報を変更したときにそれらの操作を再実行します。 Pythonがそのように機能するためには、言語は、すべてのオブジェクトがこれまでに持っていたすべての状態、またはそれらのパラメータとともに実行されたすべての操作を保持する必要があります。どちらの場合でも、プログラムのメモリ使用量が増え、実行速度が低下します。さらに、string1
を別の式で使用したとします。その値も更新する必要があります。 Python 3では、print()
は関数です。変数が変更されたときに再び呼び出されるべきですか?
ある程度はそのように動作する言語がありますが、Pythonはその1つではありません。明示的に(関数を記述して呼び出して)明示的に手配しない限り、Pythonは式を一度評価し、その正確な結果を今後使用します。
実際に、あなたが望むのはPythonでも不可能です。文字列補間(%
操作)を実行すると、コードは補間している値だけを表示します。 "6"
がplacehold
という変数から来ていることはわかりません。したがって、それが望む場合であっても、後で文字列を変更することはできませんでした。placehold
とstring1
の間に関係があることを知る方法がないためです。 (例えば、placehold + "0"
のような式でも構わないので、後で再評価するために、Pythonは変数名だけでなく、式全体を覚えておく必要があります)
は、あなたが望む特定の動作を提供するために、独自の文字列のサブクラスを書くことができます。
class UpdatingString(str):
def __str__(self):
return self % placehold
placehold = "6"
string1 = UpdatingString("this is string one and %s")
print(string1)
placehold = "7"
print(string1)
をしかし、これはスコープの問題(基本的には、クラス変数とすることを意味し、placehold
を見てできるようにする必要がありますをはらんでいますクラスは同じ関数またはグローバルスコープで定義する必要があります)。また、この特別な文字列を、別の文字列、例えば連結を伴う操作で使用すると、それはほぼ確実に特別な処理を中止します。これらの問題を解決することは可能ですが、髪の毛がかかっています。私はそれをお勧めしません。
文字列は不変です。彼らは変わらない。 'StringVar'のようなものを使用するか再割り当てする – Li357
' string1 = 'の値を 'placehol'の値に変更した後、これは' string1 = "これを文字列1と"%placehold "変化する。 – Abdou