[21522]TIL 2 Python変数Scope
Pythonの変数宣言/割当てロジックを検討した.
pythonの変数を宣言する方法
多くのプログラミング言語を学んだことはありませんが、変数を宣言する上でPythonほど簡単な言語はありません.
globalsという名前の関数で、ファイル内のすべてのグローバル変数をチェックできます.
Python変数探究のコア「globals」
--
これは、現在のscopeに含まれるグローバル変数を返す機能です.
このdictを更新すると、グローバルスキャンに影響します.
これがPythonがメモリに変数を割り当てる方法です.
--
「name」、「doc」などの基本変数.
インポートされたランダムモジュール.
生成されたa/b変数について説明します.
Pythonでの変数管理ロジック Pythonの内部には、特定のファイルのグローバルスキャンで使用される変数がdict形式で格納され、メモリに割り当てられます. ファイルにインポートされたモジュールやファイルの情報、コメントなど(内部)も変数として宣言され、メモリに割り当てられます. すなわち、Pythonは、変数を宣言するたびに、その変数名をKeyとして保存し、その変数に割り当てられた値をglobals()というdictに格納する. 変数の値はPython dictのValueに格納されます.
変数に割り当てられた値(可変)を自由に変更できます.
変数に空の値(nullable)を割り当てることもできます.
変数の資料型を指定する必要はありません. なぜPythonの変数は可変でnullableで、データ型を事前に設定する必要がないのですか?
Python内部論理変数はglobals()というdictに格納される.
ディクショナリという資料型の特徴は:
Pythonは変数をdictに格納するので、
Pythonでは、データ型に制限されない可変、空の変数宣言を行うことができます.
いたずらをする
globals()というdictに触れると、変数を動的に宣言できます.
pythonの変数を宣言する方法
多くのプログラミング言語を学んだことはありませんが、変数を宣言する上でPythonほど簡単な言語はありません.
// 코틀린의 변수 선언
// 1. 변수 선언 예약어 var(혹은 val) 사용
// 2. 변수 명 설정
// 3. 변수 자료형 설정
// 4. npe 설정
// 5. 변수에 값 할당
var a: String? = "Hello Kotlin"
/*
php의 변수 선언
1. php 코드 영역 설정 (<?php?>
2. 변수 선언 ($)
3. 값 할당
*/
<?php
$a="Hello php";
?>
# python의 변수 선언
# 1. 변수 선언 및 값 할당
a = "Hello Python"
簡単に好きになるわけではありませんが、Pythonが内部で変数をどのように宣言しているかを見てみましょう.globalsという名前の関数で、ファイル内のすべてのグローバル変数をチェックできます.
Python変数探究のコア「globals」
print(type(globals))
##실행결과##
<class 'builtin_function_or_method'>
globalsはpythonの構築関数です.--
print(globals.__doc__)
##실행결과##
Return the dictionary containing the current scope's global variables.
NOTE: Updates to this dictionary *will* affect name lookups in the current
global scope and vice-versa.
globals関数のコメントを確認するこれは、現在のscopeに含まれるグローバル変数を返す機能です.
このdictを更新すると、グローバルスキャンに影響します.
これがPythonがメモリに変数を割り当てる方法です.
--
"""
테스트 입니다.
"""
import random
a = "Hello Python"
b = 1389571
print(globals())
##실행결과##
{
'__name__': '__main__',
'__doc__': '\n테스트 입니다.\n',
'__package__': None,
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10140ae20>,
'__spec__': None,
'__annotations__': {},
'__builtins__': <module 'builtins' (built-in)>,
'__file__': '/Users/seankim/Library/Mobile Documents/com~apple~CloudDocs/python/test.py',
'__cached__': None
'random': <module 'random' from '/opt/homebrew/Cellar/[email protected]/3.9.2_4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/random.py'>,
'a': 'Hello Python',
'b': 1389571}
これはprint文でglobals()オブジェクトを出力した結果です.「name」、「doc」などの基本変数.
インポートされたランダムモジュール.
生成されたa/b変数について説明します.
globals()['__name__'] = '__main2__'
print(globals()['__name__'])
##실행결과##
__main2__
コア「name」変数の値を「main」に変更することもできます.Pythonでの変数管理ロジック
変数に割り当てられた値(可変)を自由に変更できます.
変数に空の値(nullable)を割り当てることもできます.
変数の資料型を指定する必要はありません.
Python内部論理変数はglobals()というdictに格納される.
ディクショナリという資料型の特徴は:
1. 값을 추후에 수정할 수 있다.(mutable)
* 값을 수정할 수 없으며, key와 value 형태로 값을 저장하고자 한다면 namedtuple을 사용할 수 있다.
2. key만 존재하고 value는 아무 값도 갖지 않을 수 있다. (nullable)
3. 서로 다른 자료형을 담을 수 있는 '컨테이너'이다.
* 같은 자료형만 담을 수 있는 구조를 '플랫'이라고 한다. str, array등이 포함된다.
そうですね.Pythonは変数をdictに格納するので、
Pythonでは、データ型に制限されない可変、空の変数宣言を行うことができます.
いたずらをする
globals()というdictに触れると、変数を動的に宣言できます.
# 구구단을 변수로 만들어보자
for fore in range(1,10):
for back in range(1,10):
globals()['gugudan_{}{}'.format(fore, back)] = fore * back
print(gugudan_43)
print(gugudan_88)
##실행결과##
12
64
変数宣言なしで動的に変数を生成するゲームもできます!Reference
この問題について([21522]TIL 2 Python変数Scope), 我々は、より多くの情報をここで見つけました https://velog.io/@ddhyun93/210522TIL2파이썬-변수-Scopeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol