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

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

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

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

Python

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

Q&A

解決済

2回答

1239閲覧

numpy.int()とはなにか?.append()メソッドは通常の関数と呼び出され方が異なるのはなぜか?

SomeoneHello

総合スコア5

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/11/03 01:11

編集2021/11/03 01:13

疑問に思うこと

  1. numpy.int()とはなにか?int型にキャストしているとしたらint()との違いはなにか?

  2. リストの変数はクラス型なのか?違うのであれば、.append()メソッドは通常の関数と呼び出され方が異なるのはなぜか?

例えば下記のソースコード(2)において、リストAはあたかもlistクラスのインスタンスであるかのように宣言され、A.append(100)はインスタンスAのメソッドのような形となっているのが違和感があります。

該当のソースコード

python

1(1) 2index = np.int(time * sampling_frequency) 3 4 5(2) 6A = list(range(3)) 7print(A) 8#[0, 1, 2] 9A.append(100) 10print(A) 11#[0, 1, 2, 100]

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

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

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

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

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

quickquip

2021/11/03 12:37

疑問が解決してないなら解決済みにしない方がいいんじゃないでしょうか? あるいは解決済みにした上でやりとりを継続したいなら別の質問を建てるべきじゃないでしょうか? (もらった回答を全然読んでないかのような感じがしたので)
guest

回答2

0

ベストアンサー出ていますが、質問が残っているようなので書いてみます。

リストの変数はクラス型なのか?

pythonの変数に型はありません。 ですが、その時点で束縛しているオブジェクト(インスタンス)の型を持つと思えばいいでしょう。

python

1= [1, 2, 3] 2y = x.count(3) 3print(y) # -> 1が表示される。 4 5x = "abc" 6y = x.upper() 7print(y) # -> ABCが表示される。

始めのxにはlistのインスタンスが束縛されていて、.cont(3) では含まれる3の数を数えます。
次に、同じxにstr(文字列) abc のインスタンスが束縛されて、 .upper() では、大文字に変換されます。

xがリストのときには、リストのメソッドが使え、xが文字列のときには文字列のリストが使えるということになります。

.append()メソッドは通常の関数と呼び出され方が異なるのはなぜか?

通常の関数と同じ呼び出されかただと思いますが、どのように違うと思うのでしょう?

リストAはあたかもlistクラスのインスタンスであるかのように宣言され、A.append(100)はインスタンスAのメソッドのような形となっている

説明したように、Aにはこの時点で、リストのインスタンスが束縛されています。pythonの構文では、A.append は 変数Aのappendメソッドではなく、その時点でAに束縛されているオブジェクト(インスタンス)のappendメソッドが呼び出されます。

pythonの変数に型(クラス)は無く、操作は、その時点で束縛しているオブジェクトに作用するということです。

ただ、このように同じ変数に違う型のオブジェクトを束縛するような使いかたは混乱するので、実際にプログラミングをするときにはあまり使いませんね。

投稿2021/11/03 03:16

編集2021/11/03 03:30
TakaiY

総合スコア13790

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

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

SomeoneHello

2021/11/03 07:21

「.append()メソッドは通常の関数と呼び出され方が異なるのはなぜか? 通常の関数と同じ呼び出されかただと思いますが、どのように違うと思うのでしょう?」 例えば、Pythonの組み込み関数のlen()や自分で定義した関数などは x=len(["one", "two", "three"]) のように「.」をつけずに呼び出すのに対して、クラス型のインスタンスに「.」を付けて呼び出す「メソッド」は、 class Test: def Test_method(self): print("メソッド") instance = Test() instance.Test_method() のように呼び出すと思います。 .append()を使う場合は上の「メソッド」を呼び出すケースと同じように「.」をつけて A.append(100) のように書くため、上の「メソッド」を呼び出すケースに当てはめると、リスト「A」はクラス型のインスタンスに当たるのかな?と考えていました。 そこで、 1. リストAがクラス型のインスタンスに当たるのであれば、そのリストクラスはどのように定義されているのか? 2. リストAがクラス型ではないならば、どうして「.」を付けて呼び出すことができるのか? 例えば、整数型の変数にはそもそもメソッドという概念は存在せず、ましてや「.」を付けてメソッドを呼び出すことはありませんよね? x=10 x.メソッド名() というような記述はあり得ないですよね?
TakaiY

2021/11/03 13:04

整数クラスにもメソッドはありますよ。あまり使わない機能ですが、たとえば、 x = 10 print(x.bit_length()) など。 そもそも、 「 x + 20』 のような計算をするときにも、実は、内部で整数のメソッドが呼ばれていたりします。加算で呼ばれるのは「__add__」メソッドで、「x + 20」を実行すると、内部では「 x.__add__(20)」が呼ばれます。 ということで、pythonでは 数も文字も文字列もリストも辞書もクラスで、メソッドを持っています。 別の観点から話をすると、a.b という形式は、関数/メソッドの呼び出し方、というより、変数の名前の特定の仕方と言った方が近いでしょう。 pythonの基本関数であるint は int で呼べますが、numpy(np) 持っているint関数を呼ぶのであれば、np.int と書くのと同じように、s変数に入っている文字列インスタンスのupper関数を呼ぶ場合は x.upper と書くわけです。 pythonが その int や upper の処理を探して実行するわけですが、どこを探すのかをnp や x で指定しているわけです。
TakaiY

2021/11/03 13:11

クラスに属している関数であるメソッドとクラスに属さない関数との違いは、呼ばれたときに、インスタンス自身を引数に持つかどうかです。 リストのsortメソッドは、 リストlに対して、 l.sort() と呼べますが、基本関数のsortedは 引数に対象となるリストをsorted(l)のように指定しなければなりませんね。 ですが、関数としての呼び出しかたや動作は同じです。
SomeoneHello

2021/11/03 17:43

とても明快な回答ありがとうございます。すっきりしました。
guest

0

ベストアンサー

1.numpy.intintは同じものです。
なお、他にnumpy.intcなどもありますが、これはPythonのintとは異なります。
参考:Difference between np.int, np.int_, int, and np.int_t in cython?

Python

1import numpy as np 2 3print(np.int is int) # True 4print(np.intc is int) # False

2.現在のPythonではビルトイン型もクラスと同じと考えてよいです。
よってそのような書き方は自然なものです。
class list([iterable])にもclassと記載があります。

詳細は以下を参照ください。
Unifying types and classes in Python 2.2
Class vs. Type in Python

投稿2021/11/03 01:49

can110

総合スコア38341

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

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

SomeoneHello

2021/11/03 01:57

つまり、(1)の index = np.int(time * sampling_frequency) は単に整数に変換しているだけであり、np.をつけずに index = int(time * sampling_frequency)) と書いても同じ意味になると捉えて大丈夫でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問