質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

683閲覧

Python3のrandomモジュールに関して

sabx

総合スコア200

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2グッド

0クリップ

投稿2018/01/08 05:59

お聞きしたいこと

Python3.6にてrandomモジュールを下記main.pyに記載のようにimportすると、
choice()random.choice()と言った形で呼び出しできるようになりますが、
random.pyを確認してみると、choice()Randomクラス内で定義されている関数に見えます。
module名.関数名()で呼び出しするには、module.pyに直接(?クラスメソッド出ない形?)関数を定義しないとならない認識ですが、
なぜchoice関数はRandomクラスのインスタンスを作成せずに直接module名.関数()で呼び出しできるのでしょうか。

参考スクリプト

main.py

python3

1import random 2 3 4if __name__ == "__main__": 5 numbers = [1, 100] 6 print(random.choice(numbers)) // ← random.random.choice()と呼び出すのが適切でないか(モジュール.コンストラクタ.関数名())

random.py

python

1class Random(_random.Random): 2 3: 4 5## -------------------- sequence methods ------------------- 6 def choice(self, seq): 7 """Choose a random element from a non-empty sequence.""" 8 try: 9 i = self._randbelow(len(seq)) 10 except ValueError: 11 raise IndexError('Cannot choose from an empty sequence') from None 12 return seq[i] 13 14:
LouiS0616👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

random.pyの下部の方にこのようなコードがあります。

Python

_inst = Random()
seed = _inst.seed
random = _inst.random
uniform = _inst.uniform
triangular = _inst.triangular
randint = _inst.randint
choice = _inst.choice
randrange = _inst.randrange
sample = _inst.sample
shuffle = _inst.shuffle
choices = _inst.choices
normalvariate = _inst.normalvariate
lognormvariate = _inst.lognormvariate
expovariate = _inst.expovariate
vonmisesvariate = _inst.vonmisesvariate
gammavariate = _inst.gammavariate
gauss = _inst.gauss
betavariate = _inst.betavariate
paretovariate = _inst.paretovariate
weibullvariate = _inst.weibullvariate
getstate = _inst.getstate
setstate = _inst.setstate
getrandbits = _inst.getrandbits

案外ゴリゴリですね。

投稿2018/01/08 06:08

編集2018/01/08 06:10
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問