Python基礎知識の変数の詳細解


一.定義
pythonでは、変数名は最初に現れたときにのみ定義されます。再び出現すると、変数を定義するのではなく、先に定義した変数を直接呼び出します。
二.命名方法
2.1小ラクダ峰命名法
最初の単語は小文字で始まり、後の単語は頭文字で大文字になります。
first Name,lastName
2.2大ラクダ峰命名法
単語の頭文字はすべて大文字です。
ファーストName、LastName
2.3下線命名法
各単語の間を下線で結ぶ
first_name,last_name
三.命名規則
3.1識別子
開発者がカスタマイズした記号と名前
変数名、関数名、クラス名
識別子命名規則
1.数字、文字、下線だけで構成され、数字で始まることはできません。
2.pythonのキーワードと名前を変えてはいけません。
3.できるだけ名知に会うようにする
4.変数名として単一文字(i,o)は使用できません。0と1に似ていますから。
5.関数の頭文字小文字、クラスの頭文字を大文字にする
3.2キーワード
1.キーワードとは、python内で既に使用されている識別子である。
2.キーワードには特殊な機能と意味があります。
3.開発者は、キーワードと同じ名前の識別子を定義することができません。
注意:
1.命名規則は、絶対と強制のない慣例として考えられ、コードの識別と可読性を高めることを目的としています。
2.pythonの識別子は、大文字と小文字を区別するものである。
3.変数を定義する時、コードフォーマットを保証するために、PEP 8規格に従い、等号(=)の左右にスペースを残します。
四.使い方
4.1単変数の割り当て:
変数名=値
例:a=1
pythonでは、値付け文は常にオブジェクトの参照値を作成します。コピーオブジェクトではありません。したがって、pythonの変数はデータ記憶領域ではなく参照データのメモリアドレスを格納している。
在这里插入图片描述
複数の変数が含まれる場合:

a = 1
b = a
c = b
print(a) # 1
print(id(a)) # 140710098927888
print(b) # 1
print(id(b)) # 140710098927888
print(c) # 1
print(id(c)) # 140710098927888
a、b、cの3つの変数の値はすべて1に等しくて、最初に変数を定義する時bとcは直接1に等しくないとしても、彼らは依然として“1”を指すメモリアドレスを記憶しています。
4.2下のロジック:
在这里插入图片描述
4.3総括:
Pythonには値がないと言ってもいいです。引用だけです。Pythonには「変数」がありません。私たちが普段言っている変数は「ラベル」だけです。参照です。
無数の変数=1が作成された場合、メモリ内では無数の空間記憶変数だけが開発され、もう一つの空間記憶変数「1」が開発されます。これらの変数に記憶されているメモリアドレスは同じで、すべて「1」のメモリアドレスを指します。
コードレベルでは変数に値を割り当てているように見えますが、下の方では変数の参照値、すなわち変数の参照値です。
みなさんの質問があると信じて、続けて読んでください。
5.変数のステップ
まず一つ質問します。

a = [0, 1, 2]
a[1] = a
print(a)
予想結果は:

[0, [0, 1, 2], 2]
しかし、本当の結果は:

[0, [...], 2]
なぜ無限の値が与えられたのですか?
先ほどの結論と結びつけて、Pythonには赋価がなく、引用のみである。
真実は:
これは参照自体を作成した構造に相当するので、無限ループを引き起こします。
再帰関数によっては、より良い理解が可能である。

a = [0,1,2]
a[1] = a

def fun1(n1):
    for i in n1:
        if type(i) == list:
            return fun1(n1)
        else:
            print(i)

print(fun1(a[1]))
結果:
在这里插入图片描述
Pythonオブジェクトを呼び出すと最大再帰深さを超えます。
下のロジック:a[1]=aは再帰的な参照をもたらした。
在这里插入图片描述
変数aを呼び出すと[0,1,2]が呼び出されますが、[0,1,2]の構造は[0,?2)で、また[0,2)それ自体が、これを類推して再帰的に呼び出された場合。
したがって、aを巡回して出力すると、最大再帰的な深さを超えたエラーが発生します。
[0,[0,1,2],2]を得るための結果は難しくないです。

a = [0,1,2]
a[1] = a[:]
print(a) # [0, [0, 1, 2], 2]
a[:]=a[0:テールインデックス値:1]
オブジェクトの浅いコピーやコピーのシーケンスは、もはや参照や共有変数ではありませんが、この方法はトップレベルでしかコピーできません。
6.a=a+1とa+=1の違い
賦と引用の違いについて話しましたが、a=a+1とa+1の違いを説明します。
直接コード:

a = [1, 2]
b = a
print(id(a)) # 1878561149448
print(id(b)) # 1878561149448
a = a + [1, 2]
print(a, b) # [1, 2, 1, 2] [1, 2]
print(id(a)) # 1878593529288
print(id(b)) # 1878561149448
print ("-------------------")
a = [1, 2]
b = a
print(id(a)) # 1878561149960
print(id(b)) # 1878561149960
a += [1, 2]
print(a, b) # [1, 2, 1, 2] [1, 2, 1, 2]
print(id(a)) # 1878561149960
print(id(b)) # 1878561149960
比較で問題が発見されました。変数aは「=」と「+=」で演算され、得られた変数bは意外にも違っています。演算後の変数aのidも違います。
a=a+[1,2]を実行した後:
変数bの指し示す値は変化しませんでしたが、変数aのidが変化し、値も変化しました。
a+=[1,2]を実行した後:
変数aとbの値は変わりましたが、両者のIDは変わりません。
具体的な原因は、図を見て話します。
a=a+[1,2]を実行すると、新しいオブジェクトが生成され、cpu上に空間記憶a+[1,2]を開いてaから指さします。したがって、変数aのidが変化し、値も変化します。このとき変数bが指す値は変更されていません。
在这里插入图片描述
a+=[1,2]を実行した後:新たなオブジェクトは生成されませんが、aを本来のメモリアドレスに指すオブジェクトの値をa+[1,2]に変更したため、変数aとbの値は変更されましたが、両者のidは変わりません。
在这里插入图片描述
可変オブジェクトの種類と可変オブジェクトのタイプについては、異なる結果があります。
可変オブジェクトタイプ:+=元のアドレス上のオブジェクトの値を変更し、元のアドレスを変更しません。は、元のアドレスを変更し、新しいオブジェクトを作成し、新しいアドレスを指します。
オブジェクトの種類を変更することはできません。元のアドレスを変更し、新規作成されたオブジェクトのアドレスを指します。

a = 'abc'
b = a
print(id(a)) # 1629835782384
print(id(b)) # 1629835782384
a = a + 'd'
print(a, b) # abcd abc
print(id(a)) # 1629835853168
print(id(b)) # 1629835782384
print ("-------------------")
a = 'abc'
b = a
print(id(a)) # 1629835782384
print(id(b)) # 1629835782384
a += 'd'
print(a, b) # abcd abc
print(id(a)) # 1629835782384
print(id(b)) # 1629835782384
ここでPython基礎知識の変数に関する詳細な文章を紹介します。python変数に関する詳細な内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。