teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2019/11/18 02:47

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  - 直感的には無理では? と思います。言語仕様上、まったく想定されていない動作なのです。
2
2
  - 無理やりできる方法があったとして(呼び出し元の構文情報を渡すとか)、やるべきではないと感じます。
3
- - 次善の策として`locals()`([ドキュメント](https://docs.python.org/ja/3/library/functions.html#locals))を渡して書き換えるという発想が出てくるかもしれませんが、書き換え不可能です。
3
+ - 次善の策として`locals()`([ドキュメント](https://docs.python.org/ja/3/library/functions.html#locals))を渡して書き換えるという発想が出てくるかもしれませんが、これは書き換え不可能ですからできません
4
4
  - 名前空間の代わりに使う辞書を自分で作れば、↑相当の処理は可能でしょう。こんな感じです。できるけど何か利点はあるかなぁ・・・静的解析ツールなどの支援もこれだと受けられないでしょう。
5
5
  ```python
6
6
 

2

ミス

2019/11/18 02:47

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  - 直感的には無理では? と思います。言語仕様上、まったく想定されていない動作なのです。
2
2
  - 無理やりできる方法があったとして(呼び出し元の構文情報を渡すとか)、やるべきではないと感じます。
3
3
  - 次善の策として`locals()`([ドキュメント](https://docs.python.org/ja/3/library/functions.html#locals))を渡して書き換えるという発想が出てくるかもしれませんが、書き換え不可能です。
4
- - 名前空間の代わりに使う辞書を自分で作れば、↑相当の処理は可能でしょう。こんな感じです。できるけど何か利点はあるかなぁ・・・
4
+ - 名前空間の代わりに使う辞書を自分で作れば、↑相当の処理は可能でしょう。こんな感じです。できるけど何か利点はあるかなぁ・・・静的解析ツールなどの支援もこれだと受けられないでしょう。
5
5
  ```python
6
6
 
7
7
  class GetSelfVariableNameClass:
@@ -13,7 +13,8 @@
13
13
  def main():
14
14
  names = dict()
15
15
  GetSelfVariableNameClass("y", names)
16
- print(y.variable_name) # => 'y'
16
+ # 以後ローカル変数yを書く代わりにnames["y"]と書くことにする
17
17
 
18
- # 以後ローカル変数yを書く代わりにnames["y"]と書くことにする
18
+ print(names["y"].variable_name) # => 'y'
19
+
19
20
  ```

1

追記

2019/11/18 02:46

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -1,4 +1,4 @@
1
- - 無理では? と思います。まったく想定されていない動作なのです。
1
+ - 直感的には無理では? と思います。言語仕様上、まったく想定されていない動作なのです。
2
2
  - 無理やりできる方法があったとして(呼び出し元の構文情報を渡すとか)、やるべきではないと感じます。
3
3
  - 次善の策として`locals()`([ドキュメント](https://docs.python.org/ja/3/library/functions.html#locals))を渡して書き換えるという発想が出てくるかもしれませんが、書き換え不可能です。
4
4
  - 名前空間の代わりに使う辞書を自分で作れば、↑相当の処理は可能でしょう。こんな感じです。できるけど何か利点はあるかなぁ・・・