🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

1回答

6911閲覧

.valueの文法的な意味

tomoyuki500219

総合スコア21

Python

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

0グッド

0クリップ

投稿2021/01/13 04:03

編集2021/01/13 04:48

python初心者奮闘中です。不躾な質問で恐縮ですがよろしくお願いいたします

res = sdk.maz_get_tool_data_num(0) for i in range(res["num"].value):

下記の辞書型(だと思っている)の戻り値を格納した変数でnumの値を.valueを付けて
表示しています。.valueはpythonの文法的には何でしょうか?.valueを付けるとres["num"]の
値が返って

{'status': 0, 'num': c_long(120)}

printでの出力結果は下記です

>>> print(res) {'status': 0, 'num': c_long(120)} >>> print(res["num"]) c_long(120) >>> print(res["num"].value) 120

追記1
maz_get_tool_data_numは下記のような処理になっています。
C、C++で行う処理をPythonで行うように変換するようなことをしています。

def maz_get_tool_data_num(self, head): result_dict = { "status": None, "num": None, } self.sdk.MazGetToolDataNum.retype = c_int self.sdk.MazGetToolDataNum.argtypes = ( c_ushort, c_ushort, POINTER(c_long)) num = c_long() result_dict["status"] = self.sdk.MazGetToolDataNum( self.hndl, head, byref(num)) result_dict["num"] = num return result_dict

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

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

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

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

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

tiitoi

2021/01/13 04:14

c_long とはなんでしょうか?なにかのライブラリを使っているのであれば、そのあたりの情報を記載してください
tomoyuki500219

2021/01/13 04:51

回答ありがとうございます 工作機械からデータを取得するAPI用のライブラリを使用もしています。 質問文追記1も参照していただいたら、何か情報になりませんでしょうか?
guest

回答1

0

ベストアンサー

.valueはpythonの文法的には何でしょうか?

文法的には、属性参照です。res["num"] の結果のオブジェクトの、value という名前の属性にアクセスします。c_longという型にvalueという属性があるのでしょう。(おそらくctypesのc_long)

投稿2021/01/13 04:40

int32_t

総合スコア21679

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

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

tomoyuki500219

2021/01/13 05:14

ctypesをimportはしています 「ctypesのc_long」のリンク先の解説に、インスタンスは一つだけ属性を持ちます:valueという解説がありますね。この属性は、インスタンスの実際の値を持ちます。という説明から120という値を取得できる属性だと理解しました。c_longという型があり、属性があるということが不思議です…。
int32_t

2021/01/13 05:19

c_longを使う以上、c_longの仕様に従わなければならないというだけです。 maz_get_tool_data_num() で「result_dict["num"] = num」を「result_dict["num"] = num.value」にすれば呼び出し側でc_longを意識する必要はなくなります。
tomoyuki500219

2021/01/13 06:41

なんとなく理解できました。すみませんが相談させていただきたいのですが、num = c_long()はnumをc_long型にするコードなのでしょうか?
int32_t

2021/01/13 06:49

変数numにc_long型のインスタンスを代入するコードです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問