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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

743閲覧

python、関数1=関数2 とすることで、 関数1の変数が関数2の変数にセットされる仕組み

blendegg

総合スコア81

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/16 09:10

###疑問
ゲームエンジンなどで、vector2というxとyの2つの座標を持つ関数を、position = vector2などとすると移動出来ます。vector2は位置を格納する関数、positionは物体を移動させる関数です。
positionにもx,yの変数があって、そこにセットされていると思われます。
こういった機能はpythonのどんな機能で実現できるのでしょうか?

###コード

python

1def vector2(): 2 x = 10 3 y = 20 4 print(x,y) 5def position(): 6 x = 0 7 y = 0 8position = vector2 9position()

position関数の数値にvector2の数値をセットしています。
これでいいのでしょうか?
これでは関数の中身をまるごと書き換えているわけで、変数値を個別に書き換えているわけではない用に感じます。
positionのy変数をz=0としても結果は10,20となりますから。

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

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

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

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

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

guest

回答4

0

position関数の数値にvector2の数値をセットしています。

いえ、これは関数そのものを代入しています。結果、positionにはvector2と同じ関数がセットされます。

投稿2019/05/16 09:27

maisumakun

総合スコア145192

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

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

blendegg

2019/05/16 11:01

私の書いたコードの場合はそうなってしまうようですね、、、
guest

0

投稿2019/05/16 09:18

yayakona

総合スコア69

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

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

0

ベストアンサー

position = vector2 とする場合、一般的にはどちらも関数ではない値であるべきだと思います。
今回の例では関数をそのまま代入しているので、 position として宣言された関数は使えなくなります。

例えば、そのコードに続けて

python

1vector3 = vector2

としてみると、もともと関数として宣言されていない vector3vector3() として呼び出せることがわかります。

投稿2019/05/16 10:29

mather

総合スコア6753

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

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

blendegg

2019/05/16 11:15

たしかにvector3も使えるようになりますね 関数自体の代入という結果ですよね
mather

2019/05/16 12:06

そうです。
guest

0

疑問とコードとタイトルが乖離しているので、疑問にだけ回答しますが、https://teratail.com/questions/180755 のコードが参考になると思います。


python

1class Vector2(): 2 def __init__(self, x, y): 3 self.x = x 4 self.y = y 5 6class Character(): 7 def __init__(self): 8 self.position = Vector2(0, 0) 9 10 def set_position(self, vec): 11 self.position.x = vec.x 12 self.position.y = vec.y

というような定義にして、

python

1start_posistion = Vector2(10, 20) 2c = Characher() 3c.set_position(start_posistion)

みたいに使うのが正着でしょうね。
("これが正しい"ということでは決してありません。これでは都合が悪いことはいろいろとあります)

投稿2019/05/16 09:51

編集2019/05/16 23:56
quickquip

総合スコア11051

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

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

blendegg

2019/05/16 11:03

class = classという形ならば、疑問の機能が実現できるということですか?
ozwk

2019/05/17 01:09 編集

関数だと思いこんでるだけで 質問者さんのイメージしているものは多分 ただゲームオブジェクトのpositionメンバにvectorクラスのインスタンス代入をしているだとのだと思います。
quickquip

2019/05/16 23:18 編集

! なるほど! それは伝わらない! Pythonにもそういう言語要素はありますが質問者さんの理解度を考えるとその例を挙げるのは適切ではないと思いました(私も使いどころの難しさで躊躇するようなものなので)。 のちほどそういう意図に沿った例に書き直しておきましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問