Python 3.6で導入されたF-Stringは、文字列をフォーマットするための推奨される方法となっています。
F-Stringを使用すると、文字列の特定の部分をフォーマットすることができます。
文字列をF-Stringとして指定するには、文字列リテラルの前に単純にfを置きます。以下のようにします:
txt = f"The price is 49 dollars"
print(txt)
F-Stringを使用して値をフォーマットするには、プレースホルダ {} を追加します。プレースホルダには変数、演算、関数、および修飾子を含めることができます。
price = 59
txt = f"The price is {price} dollars"
print(txt)
プレースホルダには修飾子も含めることができます。修飾子はコロン : の後に.2fのような形式で指定され、小数点以下2桁の固定小数点数を意味します。
price = 59
txt = f"The price is {price:.2f} dollars"
print(txt)
変数を使わずに直接値をフォーマットすることもできます:
txt = f"The price is {95:.2f} dollars"
print(txt)
プレースホルダの中でPythonの演算を行うことができます。
txt = f"The price is {20 * 59} dollars"
print(txt)
変数に対して演算を行うことも可能です。
price = 59
tax = 0.25
txt = f"The price is {price + (price * tax)} dollars"
print(txt)
プレースホルダ内でif…else文を実行することもできます。
price = 49
txt = f"It is very {'Expensive' if price>50 else 'Cheap'}"
print(txt)
プレースホルダ内で関数を実行することができます。例えば、文字列メソッドupper()を使用して値を大文字に変換することができます。
fruit = "apples"
txt = f"I love {fruit.upper()}"
print(txt)
組み込みのPythonメソッドでなくても、独自の関数を作成して使用することができます。
def myconverter(x):
return x * 0.3048
txt = f"The plane is flying at a {myconverter(30000)} meter altitude"
print(txt)
この章の冒頭で、.2f修飾子を使用して数値を固定小数点数で2桁表示する方法を説明しました。
修飾子 | 説明 |
---|---|
:< | 結果を左寄せに配置します(利用可能なスペース内で) |
:> | 結果を右寄せに配置します(利用可能なスペース内で) |
:^ | 結果を中央寄せに配置します(利用可能なスペース内で) |
:= | 符号を左端に配置します |
:+ | 結果が正または負の場合にプラス記号を使用します |
:- | 負の値の場合にマイナス記号を使用します |
: | 正の数の前に余分なスペースを挿入します(負の数の前にはマイナス記号を挿入します) |
:, | 数値を千単位でカンマ区切りにします |
:_ | 数値を千単位でアンダースコア区切りにします |
:b | 2進数形式 |
:c | 値を対応するUnicode文字に変換します |
:d | 10進数形式 |
:e | 小数形式、小文字e |
:E | 小数形式、大文字E |
:f | 固定小数点数形式 |
:F | 固定小数点数形式、大文字形式(infおよびnanをINFおよびNANとして表示します) |
:g | 一般的な形式 |
:G | 一般的な形式(指数表記には大文字Eを使用します) |
: |
8進数形式 |
: |
16進数形式、小文字 |
:X | 16進数形式、大文字 |
:n | 数値形式 |
:% | パーセント形式 |
Python 3.6以前では、文字列をフォーマットするためにformat()メソッドを使用していました。
format()メソッドは今でも使用することができますが、F-Stringの方が速く、文字列をフォーマットする推奨される方法となっています。
このページの次の例では、format()メソッドを使用して文字列をどのようにフォーマットするかを示します。
format()メソッドもプレースホルダとしてカーリーブラケット {} を使用しますが、構文は若干異なります:
price = 49
txt = "The price is {} dollars"
print(txt.format(price))
値を変換する方法を指定するために、カーリーブラケット内にパラメータを追加することができます:
txt = "The price is {:.2f} dollars"
複数の値を使用したい場合は、format()メソッドに値を追加するだけです:
print(txt.format(price, itemno, count))
そして、追加のプレースホルダを指定します:
quantity = 3
itemno = 567
price = 49
myorder = "I want {} pieces of item number {} for {:.2f} dollars."
print(myorder.format(quantity, itemno, price))
正しいプレースホルダに値を配置するために、インデックス番号(カーリーブラケット {0} 内の数字)を使用することができます:
quantity = 3
itemno = 567
price = 49
myorder = "I want {0} pieces of item number {1} for {2:.2f} dollars."
print(myorder.format(quantity, itemno, price))
同じ値を複数回参照する場合は、インデックス番号を使用します:
age = 36
name = "John"
txt = "His name is {1}. {1} is {0} years old."
print(txt.format(age, name))
カーリーブラケット {carname} 内に名前を入力して名前付きインデックスを使用することもできます。ただし、パラメータ値を渡すときに名前を使用する必要があります txt.format(carname = “Ford”):
myorder = "I have a {carname}, it is a {model}."
print(myorder.format(carname = "Ford", model = "Mustang"))
Pythonではユーザー入力を受け付けることが可能です。
これにより、ユーザーに入力を求めることができます。
Python 3.6ではinput()メソッドが使用されます。
Python 2.7ではraw_input()メソッドが使用されます。
次の例では、ユーザー名を入力して、そのユーザー名を画面に表示します:
username = input("ユーザー名を入力してください:")
print("ユーザー名は: " + username)
username = raw_input("ユーザー名を入力してください:")
print("ユーザー名は: " + username)
Pythonはinput()関数に達すると実行を停止し、ユーザーが入力を行うと再開します。
exceptブロックはエラーを処理します。
elseブロックは、エラーが発生しない場合にコードを実行します。
finallyブロックは、tryブロックとexceptブロックの結果に関係なく、常にコードを実行します。
エラーが発生すると、通常、Pythonは停止しエラーメッセージを生成します。
これらの例外はtry文を使用して処理できます:
try:
print(x)
except:
print("例外が発生しました")
tryブロックがエラーを発生させるため、exceptブロックが実行されます。
tryブロックがない場合、プログラムはクラッシュしエラーを発生させます:
print(x)
多くの例外を定義でき、特定の種類のエラーに対して特別なコードブロックを実行できます:
try:
print(x)
except NameError:
print("変数xは定義されていません")
except:
print("何かが間違っています")
elseキーワードを使用して、エラーが発生しなかった場合に実行するコードブロックを定義できます:
try:
print("こんにちは")
except:
print("何かが間違っています")
else:
print("問題は発生しませんでした")
finallyブロックは指定された場合、tryブロックがエラーを発生させたかどうかに関係なく、常に実行されます。
try:
print(x)
except:
print("何かが間違っています")
finally:
print("try exceptは終了しました")
これはオブジェクトを閉じ、リソースをクリーンアップするのに便利です:
try:
f = open("demofile.txt")
try:
f.write("Lorem Ipsum")
except:
print("ファイルへの書き込み中にエラーが発生しました")
finally:
f.close()
except:
print("ファイルのオープン中にエラーが発生しました")
このプログラムはファイルオブジェクトを開いたままにしません。
Python開発者として、条件が発生した場合に例外をスローすることができます。
例外をスローするには、raiseキーワードを使用します。
x = -1
if x < 0:
raise Exception("マイナスの数は許可されていません")
raiseキーワードは例外をスローするために使用されます。
どのようなエラーをスローするか、およびユーザーに表示するテキストを定義できます。
x = "hello"
if not type(x) is int:
raise TypeError("整数のみが許可されています")
Note: PIP(パイプ)はPythonのパッケージ、もしくはモジュールのためのパッケージマネージャーです。
Pythonバージョン3.4以降をお使いの場合、PIPはデフォルトで含まれています。
パッケージにはモジュールに必要なすべてのファイルが含まれています。
モジュールはPythonコードのライブラリで、プロジェクトに含めることができます。
コマンドラインを使用して、Pythonのスクリプトディレクトリの場所に移動し、次のコマンドを入力します:
PIPのバージョンを確認します:
C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip --version
PIPがインストールされていない場合、次のページからダウンロードしてインストールできます:https://pypi.org/project/pip/
パッケージのダウンロードは非常に簡単です。
コマンドラインインターフェースを開き、PIPにダウンロードしたいパッケージを指示します。
“camelcase” という名前のパッケージをダウンロードします:
C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip install camelcase
これで、最初のパッケージをダウンロードしてインストールしました!
パッケージがインストールされたら、すぐに使用できます。
プロジェクトに “camelcase” パッケージをインポートします。
“camelcase” をインポートして使用します:
import camelcase
c = camelcase.CamelCase()
txt = "hello world"
print(c.hump(txt))
さらに多くのパッケージをPyPIで見つけることができます。
パッケージを削除するには、以下のアンインストールコマンドを使用します:
“camelcase” という名前のパッケージをアンインストールします:
C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip uninstall camelcase
PIPパッケージマネージャーは、camelcaseパッケージを削除するかどうか確認します:
Uninstalling camelcase-02.1:
Would remove:
c:\users\Your Name\appdata\local\programs\python\python36-32\lib\site-packages\camelcase-0.2-py3.6.egg-info
c:\users\Your Name\appdata\local\programs\python\python36-32\lib\site-packages\camelcase\*
Proceed (y/n)?
y を押すとパッケージが削除されます。
システムにインストールされているすべてのパッケージをリストするには、以下のリストコマンドを使用します:
インストールされているパッケージの一覧を表示します:
C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip list
結果:
Package Version
-----------------------
camelcase 0.2
mysql-connector 2.1.6
pip 18.1
pymongo 3.6.1
setuptools 39.0.1
Note: 正規表現は、検索パターンを形成する文字のシーケンスです。
正規表現は指定した検索パターンが文字列に含まれるかどうかをチェックするために使用されます。
Python には正規表現を扱うための組み込みパッケージ re があります。
import re
re モジュールをインポートしたら、正規表現を使用できます:
文字列が “The” で始まり “Spain” で終わるかどうかを調べます:
import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
re モジュールには、文字列を検索して一致するものを見つけるための関数群が用意されています:
関数 | 説明 |
---|---|
findall() | 全ての一致を含むリストを返します |
search() | 文字列全体で一致がある場合は Match オブジェクトを返します |
split() | 一致した場所で文字列を分割したリストを返します |
sub() | 一致した文字列を指定した文字列で置換します |
メタ文字は特別な意味を持つ文字です:
文字 | 説明 | 例 |
---|---|---|
[] | 一連の文字を表します | “[a-m]” |
\ | 特別なシーケンスを示します(特殊文字をエスケープするためにも使用します) | “\d” |
. | 改行文字を除く任意の文字 | “he..o” |
^ | 文字列の先頭 | “^hello” |
$ | 文字列の末尾 | “planet$” |
* | 0回以上の出現 | “he.*o” |
+ | 1回以上の出現 | “he.+o” |
? | 0回または1回の出現 | “he.?o” |
{} | 指定した回数の出現 | “he.{2}o” |
| | どちらか一方 | “falls|stays” |
() | キャプチャおよびグループ化 |
特殊シーケンスは \ の後に特定の文字が続き、特別な意味を持ちます:
文字 | 説明 | 例 | |
---|---|---|---|
\A | 文字列の先頭に指定した文字がある場合に一致します | “\AThe” | |
\b | 単語の先頭または末尾に指定した文字がある場合に一致します(行頭に “r” があることで “raw string” として扱われることに注意してください) | r”\bain” | r”ain\b” |
\B | 指定した文字が存在する場合に一致しますが、単語の先頭(または末尾)ではありません(行頭に “r” があることで “raw string” として扱われることに注意してください) | r”\Bain” | r”ain\B” |
\d | 文字列に数字(0~9)が含まれる場合に一致します | “\d” | |
\D | 文字列に数字が含まれない場合に一致します | “\D” | |
\s | 文字列に空白文字が含まれる場合に一致します | “\s” | |
\S | 文字列に空白文字が含まれない場合に一致します | “\S” | |
\w | 文字列に単語文字(a ~ Z、0 ~ 9、およびアンダースコア _)が含まれる場合に一致します | “\w” | |
\W | 文字列に単語文字が含まれない場合に一致します | “\W” | |
\Z | 文字列の末尾に指定した文字がある場合に一致します | “Spain\Z” |
セットは、角かっこ [] の中に特別な意味を持つ文字のセットを指定します:
セット | 説明 |
---|---|
[arn] | 指定した文字(a、r、または n)のいずれかが存在する場合に一致します |
[a-n] | a から n までのアルファベット順の小文字に一致します |
[^arn] | a、r、n 以外の任意の文字に一致します |
[0123] | 指定した数字(0、1、2、または 3)のいずれかが存在する場合に一致します |
[0-9] | 0 から 9 までの任意の数字に一致します |
[0-5][0-9] | 00 から 59 までの任意の二桁の数字に一致します |
[a-zA-Z] | 小文字または大文字のアルファベット順の任意の文字に一致します |
[+] | セット内では特に意味を持ちません。+ 文字自体に一致します |
findall() 関数はすべての一致を含むリストを返します。
すべての一致した文字列をリストで表示します:
import re
txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)
リストは一致した順に表示されます。
一致するものがない場合、空のリストが返されます:
一致しなかった場合は空のリストが返されます:
import re
txt = "The rain in Spain"
x = re.findall("Portugal", txt)
print(x)
search() 関数は文字列全体を検索し、一致がある場合は Match オブジェクトを返します。
複数の一致がある場合、最初の一致のみが返されます:
文字列内の最初の空白文字を検索します:
import re
txt = "The rain in Spain"
x = re.search("\s", txt)
print("最初の空白文字は位置:", x.start())
一致がない場合、値 None が返されます:
一致しなかった場合の検索:
import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)
split() 関数は一致した場所で文字列を分割したリストを返します:
各空白文字で分割します:
import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
maxsplit パラメータを指定することで、分割数を制御できます:
最初の一致でのみ分割します:
import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)
sub() 関数は一致した文字列を指定したテキストで置換します:
各空白文字を数字 9 で置換します:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)
count パラメータを指定することで、置換数を制御できます:
最初の 2 つの一致を置換します:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)
Match オブジェクトは検索と結果に関する情報を含むオブジェクトです。
注意:一致がない場合、Match オブジェクトの代わりに値 None が返されます。
Match オブジェクトを返す検索:
import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) # これはオブジェクトを出力します
Match オブジェクトには、検索と結果に関する情報を取得するためのプロパティやメソッドがあります:
.span()
: 一致の開始位置と終了位置を含むタプルを返します。.string
: 関数に渡された文字列を返します。.group()
: 一致の部分を返します。最初の一致位置(開始位置と終了位置)を出力します。
正規表現は大文字 “S” で始まる単語を探します:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())
関数に渡された文字列を出力します:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
一致の部分を出力します。
正規表現は大文字 “S” で始まる単語を探します:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())
注意:一致がない場合、Match オブジェクトの代わりに値 None が返されます。
Note: JSON はデータを保存して交換するための構文です。
JSON は JavaScript オブジェクト表記で書かれたテキストです。
Python には JSON データを扱うための組み込みパッケージ json があります。
json モジュールをインポートします:
import json
JSON 文字列がある場合、json.loads() メソッドを使用して解析できます。結果は Python の辞書になります。
import json
# いくつかの JSON:
x = '{ "name":"John", "age":30, "city":"New York"}'
# 解析する:
y = json.loads(x)
# 結果は Python の辞書です:
print(y["age"])
結果:
30
Python オブジェクトがある場合、json.dumps() メソッドを使用して JSON 文字列に変換できます。
import json
# Python オブジェクト(辞書):
x = {
"name": "John",
"age": 30,
"city": "New York"
}
# JSON に変換:
y = json.dumps(x)
# 結果は JSON 文字列です:
print(y)
結果:
{"name": "John", "age": 30, "city": "New York"}
以下の Python オブジェクトを JSON 文字列に変換できます:
import json
print(json.dumps({"name": "John", "age": 30}))
print(json.dumps(["apple", "bananas"]))
print(json.dumps(("apple", "bananas")))
print(json.dumps("hello"))
print(json.dumps(42))
print(json.dumps(31.76))
print(json.dumps(True))
print(json.dumps(False))
print(json.dumps(None))
Python から JSON に変換する際、Python オブジェクトは JSON(JavaScript)の対応するデータ型に変換されます:
Python | JSON |
---|---|
辞書 | Object |
リスト | Array |
タプル | Array |
文字列 | String |
整数 | Number |
浮動小数点数 | Number |
True | true |
False | false |
None | null |
すべての法的なデータ型を含む Python オブジェクトを JSON 文字列に変換します:
import json
x = {
"name": "John",
"age": 30,
"married": True,
"divorced": False,
"children": ("Ann","Billy"),
"pets": None,
"cars": [
{"model": "BMW 230", "mpg": 27.5},
{"model": "Ford Edge", "mpg": 24.1}
]
}
print(json.dumps(x))
結果のフォーマットを整える
上記の例は JSON 文字列を出力しますが、インデントや改行がなく、読みやすくありません。
json.dumps() メソッドには、結果をより読みやすくするためのパラメータがあります:
インデントパラメータを使用してインデント数を定義します:
json.dumps(x, indent=4)
セパレータを定義することもできます。デフォルト値は (“, “, “: “) で、それぞれのオブジェクトを区切るためにコンマとスペースを、キーと値を区切るためにコロンとスペースを使用します:
json.dumps(x, indent=4, separators=(". ", " = "))
結果のキーの順序を整理するための sort_keys パラメータもあります:
json.dumps(x, indent=4, sort_keys=True)
Note: Python には、数値に対する数学的なタスクを実行するための組み込み数学関数があり、また豊富な数学モジュールも提供されています。
min() 関数と max() 関数は、イテラブルな要素の中から最小値または最大値を見つけるために使用されます:
x = min(5, 10, 25)
y = max(5, 10, 25)
print(x)
print(y)
結果:
5
25
abs() 関数は指定された数値の絶対値(正の値)を返します:
x = abs(-7.25)
print(x)
結果:
7.25
pow(x, y) 関数は x の y 乗の値を返します(xy):
x = pow(4, 3)
print(x)
結果:
64
Python には math という組み込みモジュールもあり、さまざまな数学関数を提供しています。
math モジュールを使用するには、まずモジュールをインポートする必要があります:
import math
math モジュールをインポートしたら、そのモジュールのメソッドや定数を使用することができます。
例えば、math.sqrt() メソッドは指定した数値の平方根を返します:
import math
x = math.sqrt(64)
print(x)
結果:
8.0
math.ceil() メソッドは数値をその最も近い整数に向かって切り上げ、math.floor() メソッドは数値をその最も近い整数に向かって切り下げ、結果を返します:
import math
x = math.ceil(1.4)
y = math.floor(1.4)
print(x) # returns 2
print(y) # returns 1
結果:
2
1
math.pi 定数は PI の値(3.14…)を返します:
import math
x = math.pi
print(x)
結果:
3.141592653589793
Note: Python における日付は、独自のデータ型ではなく、日付オブジェクトとして扱うために datetime モジュールをインポートします。
Pythonにおける日付は独自のデータ型ではなく、日付オブジェクトとして扱うために datetime モジュールをインポートします。
datetime モジュールをインポートし、現在の日付を表示します:
import datetime
x = datetime.datetime.now()
print(x)
上記の例のコードを実行すると、次の結果が得られます:
2024-07-09 11:25:56.518891
日付には年、月、日、時、分、秒、マイクロ秒が含まれます。
datetime モジュールには、日付オブジェクトに関する情報を返す多くのメソッドがあります。
以下にいくつかの例を示しますが、この章の後半で詳しく学びます:
年と曜日名を返します:
import datetime
x = datetime.datetime.now()
print(x.year)
print(x.strftime("%A"))
日付を作成するには、datetime モジュールの datetime() クラス(コンストラクタ)を使用します。
datetime() クラスには、年、月、日の3つのパラメータが必要です:
日付オブジェクトを作成します:
import datetime
x = datetime.datetime(2020, 5, 17)
print(x)
datetime() クラスは、時間とタイムゾーン(時、分、秒、マイクロ秒、タイムゾーンの tzone)のパラメータも受け取りますが、これらはオプションで、デフォルト値は 0 です(タイムゾーンには None)。
datetime オブジェクトには、日付オブジェクトを読みやすい文字列にフォーマットするためのメソッドがあります。
このメソッドは strftime() と呼ばれ、戻り値の文字列のフォーマットを指定するために format パラメータを取ります:
月の名前を表示します:
import datetime
x = datetime.datetime(2018, 6, 1)
print(x.strftime("%B"))
すべての有効なフォーマットコードの参照:
ディレクティブ | 説明 | 例 |
---|---|---|
%a | 曜日の短いバージョン | Wed |
%A | 曜日の完全なバージョン | Wednesday |
%w | 曜日を 0-6 の数字で表現(0 は日曜日) | 3 |
%d | 月の日付 01-31 | 31 |
%b | 月の名前の短いバージョン | Dec |
%B | 月の名前の完全なバージョン | December |
%m | 月を 01-12 の数字で表現 | 12 |
%y | 世紀を含まない年の短いバージョン | 18 |
%Y | 年の完全なバージョン | 2018 |
%H | 時間を 00-23 で表現 | 17 |
%I | 時間を 00-12 で表現 | 05 |
%p | AM/PM | PM |
%M | 分を 00-59 で表現 | 41 |
%S | 秒を 00-59 で表現 | 08 |
%f | マイクロ秒を 000000-999999 で表現 | 548513 |
%z | UTC オフセット | +0100 |
%Z | タイムゾーン | CST |
%j | 年の日数 001-366 | 365 |
%U | 年の週番号(週の最初が日曜日) 00-53 | 52 |
%W | 年の週番号(週の最初が月曜日) 00-53 | 52 |
%c | 日付と時刻のローカルバージョン | Mon Dec 31 17:41:00 2018 |
%C | 世紀 | 20 |
%x | 日付のローカルバージョン | 12/31/18 |
%X | 時間のローカルバージョン | 17:41:00 |
%% | パーセント記号 | % |
%G | ISO 8601 年 | 2018 |
%u | ISO 8601 曜日(1-7) | 1 |
%V | ISO 8601 週番号(01-53) | 01 |
Note: モジュールとは、コードライブラリと同じものと考えてください。
アプリケーションに含めたい関数のセットを含むファイルです。
モジュールを作成するには、拡張子 .py を持つファイルに必要なコードを保存します:
以下のコードを mymodule.py という名前のファイルに保存します:
def greeting(name):
print("Hello, " + name)
作成したモジュールを使うには、import
ステートメントを使用します:
mymodule という名前のモジュールをインポートし、greeting 関数を呼び出します:
import mymodule
mymodule.greeting("Jonathan")
Note: モジュールから関数を使用する場合は、module_name.function_name
の構文を使用します。
モジュールには関数だけでなく、あらゆるタイプの変数(配列、辞書、オブジェクトなど)を含めることができます:
以下のコードを mymodule.py ファイルに保存します:
person1 = {
"name": "John",
"age": 36,
"country": "Norway"
}
mymodule という名前のモジュールをインポートし、person1 辞書にアクセスします:
import mymodule
a = mymodule.person1["age"]
print(a)
モジュールファイルの名前は何でもかまいませんが、拡張子 .py を持つ必要があります。
モジュールをインポートする際に、as
キーワードを使用してエイリアスを作成することができます:
mymodule に対するエイリアスとして mx を作成します:
import mymodule as mx
a = mx.person1["age"]
print(a)
Pythonにはいくつかの組み込みモジュールがあり、必要に応じていつでもインポートできます。
platform モジュールをインポートして使用します:
import platform
x = platform.system()
print(x)
モジュール内のすべての関数名(または変数名)をリストする組み込み関数があります。それが dir()
関数です:
platform モジュールに属するすべての定義済み名をリストします:
import platform
x = dir(platform)
print(x)
Note: dir()
関数はすべてのモジュールで使用でき、あなた自身で作成したモジュールも含まれます。
from
キーワードを使用してモジュールの一部だけをインポートすることができます。
mymodule という名前のモジュールには1つの関数と1つの辞書があります:
def greeting(name):
print("Hello, " + name)
person1 = {
"name": "John",
"age": 36,
"country": "Norway"
}
モジュールから person1 辞書のみをインポートします:
from mymodule import person1
print(person1["age"])
Note: from
キーワードを使用してインポートする場合、モジュール名は使用せず、モジュール内の要素を参照します。例:person1["age"]
、mymodule.person1["age"]
ではありません。
Note: 変数は作成された領域内でのみ利用可能です。これをスコープと呼びます。
関数内で作成された変数はその関数のローカルスコープに属し、その関数内でのみ使用できます。
関数内で作成された変数はその関数内で利用できます:
def myfunc():
x = 300
print(x)
myfunc()
上記の例で説明したように、変数 x は関数の外では利用できませんが、関数内の任意の関数からは利用できます:
ローカル変数は関数内の関数からアクセスできます:
def myfunc():
x = 300
def myinnerfunc():
print(x)
myinnerfunc()
myfunc()
Pythonコードのメイン部分で作成された変数はグローバル変数であり、グローバルスコープに属します。
グローバル変数はどのスコープからでも利用可能です。
関数の外で作成された変数はグローバルであり、誰でも利用できます:
x = 300
def myfunc():
print(x)
myfunc()
print(x)
関数の内外で同じ変数名を使用する場合、Pythonはそれらを別々の変数として扱います。一つはグローバルスコープ(関数の外)、もう一つはローカルスコープ(関数の内)です。
この関数はローカルの x を表示し、その後コードはグローバルの x を表示します:
x = 300
def myfunc():
x = 200
print(x)
myfunc()
print(x)
ローカルスコープに固執したままグローバル変数を作成する必要がある場合、global
キーワードを使用できます。
global
キーワードにより変数はグローバルスコープになります。
global
キーワードを使用すると、変数はグローバルスコープに属します:
def myfunc():
global x
x = 300
myfunc()
print(x)
また、関数内でグローバル変数の値を変更する場合も、global
キーワードを使用します。
関数内でグローバル変数の値を変更する場合は、global
キーワードを使用して変数にアクセスします:
x = 300
def myfunc():
global x
x = 200
myfunc()
print(x)
nonlocal
キーワードはネストした関数内で変数を扱う場合に使用されます。
nonlocal
キーワードにより変数は外側の関数に属します。
nonlocal
キーワードを使用すると、変数は外側の関数に属します:
def myfunc1():
x = "Jane"
def myfunc2():
nonlocal x
x = "hello"
myfunc2()
return x
print(myfunc1())