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

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

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

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

Q&A

解決済

3回答

687閲覧

関数名でsomething+数字が使えない理由を教えてください

sibuyak

総合スコア15

Python 3.x

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

0グッド

1クリップ

投稿2019/04/11 15:15

前提・実現したいこと

Pythonの勉強を始めたばかりです。
分かる方がいらっしゃれば教えてくださると嬉しいです。

関数を定義しているのですが、関数名を特定の単語+数字にするとエラーになります。
関数名を変更して試してみた結果、どうやら関数名がsomethingに数字をつけたものだとエラーになるようです。
これは何故でしょうか?

発生している問題・エラーメッセージ

NameError Traceback (most recent call last)
<ipython-input-11-494c895ea5e4> in <module>
1 num_str = input("好きな文字を入力してください:")
2 num = int(num_str)
----> 3 destiny_something2(num)

NameError: name 'destiny_something2' is not defined

該当のソースコード

def destiny_something2(num):
something = ["科学者","裁判官","宇宙飛行士","経理"]
idx = num % len(something)
print("運命の職種は:")
print(something[idx])

num_str = input("好きな文字を入力してください:")
num = int(num_str)
destiny_something2(num)

試したこと

関数名を destiny_something と destiny_tank2 にすると問題なく動きました。

よって、
①somethingの単語単体には問題ない
②数字の前に_を入れていないのが問題でもない
と思うのですが、何故something+数字の場合だけエラーになるのか不思議です……。

補足情報(FW/ツールのバージョンなど)

Python3型。ANACONDAのjupyterを使用しています。

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

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

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

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

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

can110

2019/04/12 02:04

エラーが再現できません。Jupyter上のメニューCell→Run All を実行してもエラー発生しますか?
guest

回答3

0

言語仕様上、そういうことは起こらないはずです。

jupyterの別々のセルに書いて、関数定義のセルを実行し忘れた、他の関数は以前定義していたのが残っていたので使えた・・・ということではないかと思うのですが。

投稿2019/04/12 09:41

hayataka2049

総合スコア30933

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

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

0

ベストアンサー

現象が再現しません。
質問文にあるコードでエラーは発生しません。
def での関数名と 呼び出し時の関数名があっていればエラーにならないはずです。
(関数名に数字は使えます。ただし名前の最初は差ううじは使えません)

イメージ説明

投稿2019/04/11 22:18

katoy

総合スコア22324

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

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

0

そういうものだと思っていたら違ったのですね……!
お二人とも、回答ありがとうございました。

もう一度試したのですが、やはりそのままでは2の方だけエラーなので、
お二方の「質問コードでエラーは出ない」「jupyterの別々のセルに書いて~」
を参考に、ひとつのセルにまとめて間の空白行を削除したところ2でもあっさり作動しました。

(ただ、分離していても関数定義のセルはきちんとあったし、
そもそも別セル状態でもdestiny_somethingとdestiny_tank2ではそこを書き換えただけで
問題なかった理由は、分からないままですが……空白行との相乗悪効果だったのかな)

お答えいただき誠にありがとうございました。
ベストアンサーは、同コードでエラーの有無を試してくださったkatoyさんに。
該当のソースコードをコピペしたらうっかりインデントが消えていたミス、失礼しました。

投稿2019/04/12 13:11

sibuyak

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問