Python 3.6で導入されたF-Stringは、文字列をフォーマットするための推奨される方法となっています。

F-Strings

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)

F-Stringでの操作

プレースホルダの中で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)

F-Stringで関数を実行する

プレースホルダ内で関数を実行することができます。例えば、文字列メソッド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を使用します)
:o 8進数形式
:x 16進数形式、小文字
:X 16進数形式、大文字
:n 数値形式
:% パーセント形式

format()メソッド

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()メソッドが使用されます。

次の例では、ユーザー名を入力して、そのユーザー名を画面に表示します:

Python 3.6

username = input("ユーザー名を入力してください:")
print("ユーザー名は: " + username)

Python 2.7

username = raw_input("ユーザー名を入力してください:")
print("ユーザー名は: " + username)

Pythonはinput()関数に達すると実行を停止し、ユーザーが入力を行うと再開します。

Note: tryブロックは、エラーをテストするためのコードブロックです。

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

elseキーワードを使用して、エラーが発生しなかった場合に実行するコードブロックを定義できます:

try:
  print("こんにちは")
except:
  print("何かが間違っています")
else:
  print("問題は発生しませんでした")

Finally

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コードのライブラリで、プロジェクトに含めることができます。

PIPのインストール確認方法

コマンドラインを使用して、Pythonのスクリプトディレクトリの場所に移動し、次のコマンドを入力します:

PIPのバージョンを確認します:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip --version

PIPのインストール方法

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: 正規表現は、検索パターンを形成する文字のシーケンスです。

正規表現は指定した検索パターンが文字列に含まれるかどうかをチェックするために使用されます。

RegEx モジュール

Python には正規表現を扱うための組み込みパッケージ re があります。

re モジュールのインポート

import re

Python における正規表現

re モジュールをインポートしたら、正規表現を使用できます:

文字列が “The” で始まり “Spain” で終わるかどうかを調べます:

import re

txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)

RegEx 関数

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() 関数

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() 関数

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() 関数

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() 関数

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 オブジェクトは検索と結果に関する情報を含むオブジェクトです。

注意:一致がない場合、Match オブジェクトの代わりに値 None が返されます。

Match オブジェクトを返す検索:

import re

txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) # これはオブジェクトを出力します

Match オブジェクトには、検索と結果に関する情報を取得するためのプロパティやメソッドがあります:

最初の一致位置(開始位置と終了位置)を出力します。

正規表現は大文字 “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

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 Dates

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)。

strftime() メソッド

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() 関数の使用

モジュール内のすべての関数名(または変数名)をリストする組み込み関数があります。それが 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 キーワードにより変数は外側の関数に属します。

nonlocal キーワードを使用すると、変数は外側の関数に属します:

def myfunc1():
  x = "Jane"
  def myfunc2():
    nonlocal x
    x = "hello"
  myfunc2()
  return x

print(myfunc1())