Pythonでの変数の定義、出力、削除等を分かりやすく解説する

スポンサーリンク

Pythonの変数とは、プログラム中の値を参照するための識別子です。

変数には、オブジェクトのメモリ上の位置が含まれています。

Pythonのプログラムが他のオブジェクトにアクセスし、その関数を呼び出したり、他の操作を実行することができます


スポンサーリンク

Pythonの変数を定義するルール

Pythonの変数を定義するには、いくつかのルールがあります。

    1. Pythonの変数名には小文字(a-z)、大文字(A-Z)、数字(0-9)、アンダースコア( _)が使用できる。
    1. 変数名は数字で始めることはできません。
  1. 3.予約キーワードは変数名として使用できません。
  2. Pythonの変数には数字だけを入れることはできません。
    1. Python の変数名はアンダースコアか文字で始めることができます。
    1. 変数名は大文字と小文字を区別します。
    1. 変数名の長さに制限はない。

Python有効な変数の例

  • abc
  • _: はい、アンダースコアで変数名を作成することができます。
  • __: はい、複数のアンダースコアも変数名として有効です。
  • 황황황
  • _abc

Pythonの無効な変数の例

  • 9abc: 変数名は数字で始めることはできません。
  • 123: 変数名には数字だけを含めることはできません。
  • x-y: 変数名で使用できる特殊文字はアンダースコアのみです。
    x-y: 変数名に使用できる特殊文字はアンダースコアのみです * def: 予約キーワードのため、無効な変数名です。

How to Declare a Variable in Python?

Pythonは動的型付け言語です。


変数を宣言するときに型を指定する必要はありません。

Pythonの変数は等号で定義されます。

左側が変数名、右側が変数値です。

Pythonで変数を宣言する例をいくつか見てみましょう。

x = 1  # number
s = "Hello"  # string
t = (1, 2# tuple
l = [1, 2, 3# list
d = {"1": "A", "2": "B"# dictionary

Pythonは多重代入もサポートしています。

Pythonは多重代入をサポートしており、一度に複数の変数を定義することができます

多重代入

また、変数のリストにシーケンスを代入することもできます。

この場合、配列の要素数は変数の数と同じでなければなりません。

a = b = c = 100
print(a, b, c)  # 100 100 100

変数の数とシーケンスの要素の数が等しくない場合、どうなるかを見てみましょう。

a, b, c = 1, 2, "Hello"
print(a, b, c)  # 1 2 Hello
 
a, b, c = (1, 2, 3)
print(a, b, c)  # 1 2 3
 
a, b, c = [1, 2, 3]
print(a, b, c)  # 1 2 3
 
a, b, c = "098"
print(a, b, c)  # 0 9 8

How to Print Variable Value in Python?

Pythonのprint()関数を使って、変数の値を表示することができます

それでは、Pythonで変数の値を表示する例をいくつか見てみましょう。

>>> a,b = (1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>>
>>> a,b,c,d = (1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 4, got 3)
>>>
x = 1  # number
print(x)
s = "Hello"  # string
print("s value is", s)
t = (1, 2# tuple
print("tuple value is", t)
l = [1, 2, 3# list
print(l)
d = {"1": "A", "2": "B"# dictionary
print("dict value is", d)

Pythonのプログラムは逐次的に実行されます。

そのため、定義される前に変数にアクセスしようとすると、NameErrorが発生します。

print(count)  # NameError: name 'count' is not defined
 
count = 100
 
print(count)  # 100

Pythonのベストプラクティス 変数名

上記のコードスニペットを見ると、変数名がランダムになっています。

これでは変数の意味が伝わりません。

Pythonで変数名をつけるときに従うべきいくつかのベストプラクティスがあります。

  1. Pythonの変数名には、小文字のアルファベット、数字、アンダースコアのみを使用します。
    1. 変数名に複数の単語がある場合、アンダースコアで区切ります。
    1. 変数スコープが private の場合、変数名の最初にアンダースコアを使用することができます。
    1. アンダースコアで始まる変数名やアンダースコアで終わる変数名は避けるべきです。これらはPythonの組み込みプログラムで慣習的に使われています。
    1. 変数名には常に意味のある名前を使用してください。データの種類と変数の使用目的を伝える必要があります。
    1. 変数名の長さに制限はありません。しかし、小さくて意味のある名前にするのは良いことです。

上記のベストプラクティスに基づき、上記のコードスニペットを変更して、適切な変数名を付けることができます。

count = 1
str_message = "Hello"
tuple_ints = (1, 2)
list_of_numbers = [1, 2, 3]
numbers_letters_dict = {"1": "A", "2": "B"}

How to Print the Type of Variable?

Pythonのプログラムでは、変数の型を指定しません。

そこで、 type() 関数を使用して変数の型を決定します。

それでは、変数の型を表示する例を見てみましょう。

count = 1  # number
print(type(count))
str_message = "Hello"  # string
print("str_message type is", type(str_message))
tuple_ints = (1, 2# tuple
print("tuple_ints type is", type(tuple_ints))
list_of_numbers = [1, 2, 3# list
print(type(list_of_numbers))
numbers_letters_dict = {"1": "A", "2": "B"# dictionary
print("numbers_letters_dict type is", type(numbers_letters_dict))

結果は以下の通りです。

<class 'int'>
str_message type is <class 'str'>
tuple_ints type is <class 'tuple'>
<class 'list'>
numbers_letters_dict type is <class 'dict'>

Pythonの変数の種類は?

Pythonの変数の型は、その値のデータ型です。

Pythonはオブジェクト指向のプログラミング言語です。

Pythonではすべてがオブジェクトです。

したがって、Pythonの変数は常にクラスのインスタンスです。

  • x = 1: ここで変数’x’の型は’int’です。これはintクラスのインスタンスを指しています。
  • message = “こんにちは”: メッセージ変数の型は’str’です。

Python 変数スコープ

変数のスコープは、プログラム内で変数がアクセス可能な範囲を定義します。

Pythonの変数には2つのスコープがあります。

  1. ローカルスコープ
  2. グローバルスコープ

Pythonローカル変数

変数が関数やクラスの内部で定義された場合、その内部でのみアクセス可能です。

これはローカル変数と呼ばれ、そのスコープはその関数やクラスの境界線にのみ限定されます。

もしローカル変数のスコープ外にアクセスしようとすると、その変数が定義されていないという NameError が発生します。

Pythonのローカル変数について、いくつかの例を挙げながら理解していきましょう。

def foo():
    foo_var = 1
    print(foo_var)
 
 
foo()
print(foo_var)
class Foo:
    class_foo_var = 1
 
print(class_foo_var)
  • foo()関数内のprint()はスコープ内にあるため、foo_var` にアクセスすることができます。
  • foo() 関数の外側にある print() は、変数のスコープ外なので foo_var にアクセスすることはできません。

もうひとつ、クラス内で定義されたローカル変数の例を見てみましょう。

このシナリオでは、変数のスコープがクラスになっています。

global_msg = "Hello"
 
 
def foo():
    print(global_msg)  # global variables are accessible inside a function
 
 
class Foo:
    print(global_msg)  # global variables are accessible inside a class
 
 
if 5 < 10:
    print(global_msg)  # global variables are accessible inside a code block

結果は以下の通りです。

NameError: 名前 ‘class_foo_var’ は定義されていません`。


Pythonグローバル変数

変数が関数やクラスの内部にない場合、プログラム内のどこからでもアクセスできます。

このような変数をグローバル変数と呼びます。

Pythonのグローバル変数の例を見てみましょう。

>>> if True:
...     var_if = "if"
... else:
...     var_else = "else"
...
>>>
>>> print(var_if)
if
>>> print(var_else)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'var_else' is not defined
>>>

if-else、forループ、whileループ、try-exceptなどのコードブロックの中で定義された変数は、その変数を宣言したコードが実行されていれば、グローバルスコープに追加されます。

簡単な例で理解しましょう。

>>> try:
...     var_try = "try"
...     raise TypeError('explicitly throwing')
... except:
...     var_except = "except"
...
>>> print(var_try)
try
>>> print(var_except)
except
>>>

elseブロックの中のコードが実行されなかったので、変数elseは定義されていない。

それでは、try-exceptブロックの例を見てみましょう。

>>> count = 100
>>> print(count)
100
>>> del count
>>>
>>> print(count)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'count' is not defined
>>>

tryブロックとexceptブロックの両方が実行されたので、tryブロック内で定義された変数にアクセスすることができます


Pythonの変数を削除する

変数の削除は del ステートメントで行います。

ここでは、Python の変数を削除する簡単な例を見てみましょう。

class Data:
    id = 0
 
 
print(Data.id# static access

Python 静的変数

クラス内で定義された変数は、クラス名でアクセスすることができます

クラスに属するので、静的変数とも呼ばれます。

d1 = Data()
 
print(d1.id# class variable accessed from object

これらの変数は、クラスオブジェクトからアクセスすることもできます。

しかし、クラスを使って静的にアクセスすることが推奨されます。

global_var = "global"
 
def foo():
    local_var = "local"
    print('global variables inside foo(): ', globals())
    print('local variables inside foo(): ', locals())
 
 
print('global variables: ', globals())
print('local variables: ', locals())
foo()

globals() と locals() 関数について簡単に説明します。

  • Python の globals() 関数は、現在のスコープのグローバル変数の辞書を返します。
  • Pythonのlocals()関数は、現在のスコープのローカル変数の辞書を返します。

Pythonのlocals()関数は、現在のスコープのローカル変数の辞書を返します。

これらはPythonの組み込み関数です。

それでは、これらの関数の簡単な例を見てみましょう。

global variables:  {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1006305f8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/hello_world.py', '__cached__': None, 'global_var': 'global', 'foo': <function foo at 0x1006817b8>}
local variables:  {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1006305f8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/hello_world.py', '__cached__': None, 'global_var': 'global', 'foo': <function foo at 0x1006817b8>}
global variables inside foo():  {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1006305f8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/hello_world.py', '__cached__': None, 'global_var': 'global', 'foo': <function foo at 0x1006817b8>}
local variables inside foo():  {'local_var': 'local'}

結果は以下の通りです。

name = "Python"
 
def foo():
    print(name)
 
foo()
print(name)
 
# Output
# Python
# Python
>>> name = "Python"
>>> def foo():
...     print(name)
...     name = "Java"
...
>>>
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'name' referenced before assignment
>>>
>>> print(name)
Python
>>>

Pythonグローバルキーワード


関数内部でグローバル変数にアクセスすることができます

しかし、それを変更することはできません。

関数内部でグローバル変数の値を変更するには、globalキーワードを使用しなければなりません。

この挙動を簡単な例で理解しましょう。

>>> name = "Python"
>>>
>>> def foo():
...     global name
...     print(name)
...     name = "Java"
...
>>> print(name)
Python
>>> foo()
Python
>>> print(name)
Java
>>>

関数の内部でグローバル変数の値を変更しようとするとどうなるかを見てみましょう。

def outer_function():
    scope = "local"
 
    def inner_function():
        nonlocal scope
        scope = "nonlocal"
        print(scope)
 
    inner_function()
    print(scope)

理由は簡単です。

代入演算子を使って “name “の値を変更すると、それがローカル変数として扱われ始めるからです。

そのため、print()関数の内部でアクセスすると、その時点では定義されていないため、投げられてしまうのです。

グローバル変数の値を変更するには、global キーワードを使用します。

Python Variable Print
How to Print Python Variable Value

Python nonlocal キーワード

nonlocalキーワードは、ブロックのスコープ外で定義された変数にアクセスするために使用されます。

これは、ネストされた関数の中で、外部で定義された変数にアクセスするために常に使用されます。

変数は常にグローバルを除く最も近いスコープで検索されます。

Python Local Variable Scope
Python Local Variable Scope

まとめ

Pythonの変数はどのプログラムでも使われます。

これらは識別子の一種です。

変数の定義方法、変数に関連するルール、変数へのアクセス方法と削除方法を学びました。

また、変数のスコープ(グローバルとローカル)についても学びました。

タイトルとURLをコピーしました