X



くだすれPython(超初心者用) その41【Ruby禁止】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
垢版 |
2019/02/04(月) 21:22:10.08ID:9MrdxUVg
★当スレにRubyのソースコード類を書くことを禁ず
☆Ruby等、Pythonではないプログラミング言語での回答類を書くことも禁ず

このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDEまたはcommand line/OS)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その40
http://mevius.5ch.net/test/read.cgi/tech/1542874174/


◆PythonのHome Page
http://www.python.org/

◆まとめwiki
ttp://python.rdy.jp/

◆Pythonのソースコードをそのまま5ちゃんにコピペすると
  インデントが崩れるので
  こういうところ↓にはってきてください
ttp://ideone.com/      Pythonするにはぷち手間あるのがめんどうかなぁ
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数を長めに指定しる。
ttps://jupyter.org/try    (旧try.jupyter.org)ちょっとめんどうそう
ttps://ja.osdn.net/pastebin/ ログイン必須になりやがった(゚Д゚#)
−−−−天麩羅ここまで−−−−
0853デフォルトの名無しさん
垢版 |
2019/03/14(木) 08:25:07.71ID:/JPtJCUD
a = 'hoge'
type(a)

これを実行すると<class 'str'>が表示される
これは変数aが指してるオブジェクトの型がstr型という意味でいいんだよね

一方で、文字列はシーケンス型でもあるからインデックスでアクセスしたり、スライスしたり出来る
この文字列がシーケンス型というのはpython上でどうやって確認するんや
0854デフォルトの名無しさん
垢版 |
2019/03/14(木) 08:34:53.42ID:lGFaI2Uv
>>853
シーケンス型の実体は存在しない
失敗しないことを天に祈りつつ勇敢にforに投入する、がPythonの思想的には正しい
厳密にやりたいなら型アノテーションでSequenceあるけど、型アノテーションなんか誰も使ってない
0855デフォルトの名無しさん
垢版 |
2019/03/14(木) 10:12:27.31ID:QThoqyRe
>>853
hasattr(a, ‘__iter__’)
Pythonではシーケンス型の事をiterableなオブジェクトという
forにiterableを渡すと__iter__()が呼ばれるのでこれの有無を確認すれば分かる
0856デフォルトの名無しさん
垢版 |
2019/03/14(木) 10:14:27.51ID:QThoqyRe
>>853
それとiterableであることとスライスできるのは別の機能
インデックスやスライスは__getitem__()で実装される
0857デフォルトの名無しさん
垢版 |
2019/03/14(木) 11:06:23.42ID:/JPtJCUD
レスありがとう

俺はstr型はシーケンス型を継承してるから、シーケンス型のようにも振る舞うと勝手に思ってたけど違うのね

str型はiterableな属性を持ってるから、for文に渡して繰り返しの処理が出来るというのはわかった

それなら、str型がsequenceableな属性を持ってるからスライスやインデックスのアクセスが出来るというのなら理解できるんだけど、シーケンス型で属性じゃないのよね

なんか混乱してきたわ(´・ω・`)
0858デフォルトの名無しさん
垢版 |
2019/03/14(木) 11:16:27.87ID:r+Z4K3kn
>>857
IterableもSequenceと同じく、クラスが満たすべき性質がドキュメント上や型アノテーションで定義されているだけの実体のない型だ
Pythonではそういう実体のない(ドキュメントや型アノテーションにしか登場しない)仮想的な型のことを一般にプロトコルと呼ぶ
Javaのinterfaceに近い概念だが、interfaceとは違ってオブジェクトに付随する型としての実体を持たないという点が異なる
0859デフォルトの名無しさん
垢版 |
2019/03/14(木) 11:26:52.83ID:RE7f17De
>>857
pythonの場合、forに渡せるとかの機能は単に__xxx__という名前の特殊メソッドが実装されているかどうかで決まる
0860デフォルトの名無しさん
垢版 |
2019/03/14(木) 11:41:55.90ID:jNBQt8MR
>>858
Pythonにはstr、listというオブジェクトは存在するが、sequence というオブジェクトは存在しない
だが、str 、listどちらもsequence型である
0863デフォルトの名無しさん
垢版 |
2019/03/14(木) 13:23:53.72ID:jNBQt8MR
>>861
適当にアンカーつけてレスしたんよ
なんかごめんな
0864847
垢版 |
2019/03/14(木) 13:28:05.85ID:tsxAqnNH
参考までに、Ruby では、Array -> Enumerable (子 -> 親)

自クラスに、each を定義して、Enumerable モジュールをinclude すれば、
Enumerable のすべてのメソッドが使える(mix-in)(内部イテレータ)

Enumerable とは繰り返しを行なうクラスのための Mix-in。
このモジュールの メソッドは全て、eachを用いて定義されているので、
インクルード するクラスには、eachが定義されていなければなりません

each を定義しない場合は、Enumerator というラッパークラスで、Enumerable のメソッドが使える(外部イテレータ)

外部イテレータは、Enumerator.next, rewind などで繰り返しを進めたり・巻き戻したり、制御できる

mix-in とは継承ではないけど、呼び出される関数探索の継承チェーンに割り込む機能。
Java のinterface みたいなもの。
Duck Typing と言って、そのメソッドに反応するかどうか

子 -> mix-in -> 親
0865デフォルトの名無しさん
垢版 |
2019/03/14(木) 13:31:58.94ID:r+Z4K3kn
>>862
goのは型が明示的にinterfaceを実装していなくても必要なメソッドがあれば受け入れるstructual subtypingという考え方
Pythonは duck typing なので本来はそれに近いのだが、型ヒントがstructual subtypingではなく明示的にクラスがインターフェイスを継承する必要がある
よってpythonにおいては型ヒントを考慮すればgoよりJavaに近い
0866デフォルトの名無しさん
垢版 |
2019/03/14(木) 13:52:11.73ID:q8OuUl64
rubyをdisる訳じゃないけど
初心者でpython学習し始めたところなら
rubyと比べない方が良いよ
覚えることが増えるだけでメリット無いから
0867デフォルトの名無しさん
垢版 |
2019/03/14(木) 13:56:28.26ID:1qhaQ5mP
これから試験受けるんだが落ちそう
0868デフォルトの名無しさん
垢版 |
2019/03/14(木) 15:34:12.56ID:1qhaQ5mP
うかったんご
0870デフォルトの名無しさん
垢版 |
2019/03/14(木) 16:56:04.19ID:lcXwIoo8
型アノテーションは、関数の出入り口と、
なんの型が分かりにくいローカル変数には
つける。

付けることで補完が強化される場合と、
しばしば補完を逆に妨げる場合があるので、
うまく折り合いを付けて付記する感じやな。
0871デフォルトの名無しさん
垢版 |
2019/03/14(木) 18:13:57.50ID:1qhaQ5mP
あざます
0879デフォルトの名無しさん
垢版 |
2019/03/15(金) 08:57:12.14ID:Oo+XcCcU
pythonのコーディングに少しづつ慣れてきたせいで,のあとに半角スペースを挿入してしまうクセが付いてしまいました
簡単なテストのためダミーでcsv作る際に,後ろにに半角スペース入れるせいでcsvDictReaderで読んでkey指定したときにkeyErrorが出てしまい数十分ですが悩んでしまいました
今後はskipinitialspaceをtrueにして使います
ありがとうございました
0880デフォルトの名無しさん
垢版 |
2019/03/15(金) 09:55:37.05ID:LNWMUSed
pythonに限らずほぼ全てのプログラミング言語でそういう癖が付くかと思うしそもそも欧米圏の言語でも全てそうだがお前何か言いがかりでも付けたいの?
0885デフォルトの名無しさん
垢版 |
2019/03/15(金) 14:18:08.50ID:SEjqglYP
最新鋭の望遠鏡で使われてる
タイパンがカッコ良かった
UKシュミット望遠鏡自体は数十年の年季もんだけど
タイパン付けると最新鋭に変身してた
0889デフォルトの名無しさん
垢版 |
2019/03/15(金) 18:58:10.65ID:8Z2zh4Or
Python初心者です。
scikit-learnで学習した学習結果を他の言語(C#)で利用したいと考えてます。
が、どうしたらいいのかわかりません。
どなたかご教授願います。
0890デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:30:46.48ID:/jMwhNVt
最終的に何をしたいのかをもう少し具体的に書いたほうが良いと思う
個人的に言語は統一した方が楽と思うよ
0891デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:48:43.20ID:8Z2zh4Or
scikit-learnでじゃんけんの人間の癖を学習させて、
そこそこの制度で予想できるようになったので、それをスマホアプリとして公開したいという欲が湧いてきました。
Pythonではスマホアプリの開発は難しそうなのでその学習結果をC#に移植したいと考えてるのですが、
そういう事は可能ですか?
0894デフォルトの名無しさん
垢版 |
2019/03/16(土) 10:56:59.10ID:Eza8KstC
>>891 iOS なら、Pythonista で簡単にアプリを作れるぞ。
Androidでもできるだろ。

そもそもiOSだと、C#じゃなくObjective-C やSwift になるからかなり垣根は高いぞ。

因みにPythonista からはObjective-C のライブラリを使うこともできるし自由に呼び出すこともできる。

なお、scikit-learn そのものをPythonistaで使うことはできない。 numpy は使えるが、scipy がインストールできない。
0895デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:10:13.00ID:INaBYg0f
いやC#つってんだからUnityで作るんだろJK
あれゲーム作るの簡単だからいいよな〜
0896デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:18:22.65ID:mXGVm9Ao
>>894
ありがとうございます。
Androidアプリを作られればIOSには対応できなくてもよいと考えてます。
Androidでscikit-learnを使うのは難しいでしょうか?
0897デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:20:10.33ID:mXGVm9Ao
Unityって物理エンジンですよね?
scikit-learnのように機械学習もできるのですか?
0898デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:31:31.62ID:Slvebd/s
学習機能は通信を介したサービスとして提供したら
scikit-learnはサーバー側で動いてりゃ良いんだし
0899デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:44:44.11ID:+8YpvTs6
>>898
そっちの方が良いと思う
機械学習の多言語移植は考えただけで血の気が引く
kerasならまだしも、scikit-learnは依存地獄が酷かった。今は大分マシ担ってるとは思うけど
0900デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:48:05.65ID:d/4KgbH7
じゃんけんするのにサーバーと通信するのは草
でもいまどきそんなもんなのか?
0902デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:53:42.85ID:mXGVm9Ao
機械学習の移植は難しいものなんですね。
サーバーにPythonを置けばいいのですね。
ありがとうございます。
0903デフォルトの名無しさん
垢版 |
2019/03/16(土) 11:58:21.60ID:eO5a7zjy
学習からC#でやり直すわけにはいかないの?
オブジェクト指向の機械学習ライブラリなんて言語によらず使い方似てるからそっちのが楽じゃない?
0905デフォルトの名無しさん
垢版 |
2019/03/16(土) 12:05:08.07ID:mXGVm9Ao
C#で機械学習ですか!
scikit-learnがすごく簡単だったのでscikit-learnで出来たらと考えてました。
使い方が似ているのならその選択も検討してみます。
ありがとうございます。
0906デフォルトの名無しさん
垢版 |
2019/03/16(土) 12:12:34.74ID:Eza8KstC
せっかくPython の勉強を始めたんだから、Python でゲーム開発までやれば良いのに、じゃんけんアプリなんて簡単でしょ。
どんなPython ゲームライブラリが適切なのかは知らないけど。
0907デフォルトの名無しさん
垢版 |
2019/03/16(土) 12:14:27.10ID:SlIDoTSl
selfについて何度も聞いてるカスなんですが、まだ意味が理解できてません
このコードの場合どういった意味を持ちますか?
インスタンス自身と言われてもイメージがつきません
記憶領域という説明も見たことがありますが、これはどういう意味でしょうか

http://codepad.org/rOzHcmIX
class apple:
def __init__(self,price,weight):
self.p = price
self.w = weight
def print(self):
print(self.p)
print(self.w)

s = apple("100yen","300g")
s2 = apple("1000yen","1000g")
s.print()
s2.print()
0908デフォルトの名無しさん
垢版 |
2019/03/16(土) 12:15:53.61ID:SlIDoTSl
訂正です
×このコードの場合どういった意味を持ちますか?
○このコードのようにselfを使うメリットはなんですか?
0909デフォルトの名無しさん
垢版 |
2019/03/16(土) 12:24:28.76ID:Eza8KstC
Android ならQpython にはKivy がバンドルされてるらしいし、kivy で良いんじゃないの?
0911デフォルトの名無しさん
垢版 |
2019/03/16(土) 12:38:34.92ID:mXGVm9Ao
>>906
Pythonは機械学習やディープラーニングを始めたくて最近勉強し始めました。
勉強してくうちにアプリを公開したいと思うようになった次第ですw
GUIはC#の方が簡単そうなので2つの言語をうまく連携できればと思ったのですが、
難しいようですね。

もちろんPythonはこれからも使いたいと思います!
0912デフォルトの名無しさん
垢版 |
2019/03/16(土) 12:58:16.11ID:Cc4OYSLe
>>907
まず自分でクラス書く前にライブラリでクラス使ってみたらわかるだろ

pandasのチュートリアルとか何でもいいけどインスタンス作ってメソッド使ってインスタンス変数参照したらself何なのかも見えてくる メモリ上の何とかなんか意識しなくていい
0914デフォルトの名無しさん
垢版 |
2019/03/16(土) 18:05:24.13ID:fe/BGgDT
vscodeとintellijのpython機能で試したのですが
awsのsdk boto3でインスタンス化したクライアントに対してオートコンプリートを働くようにするのってどうしたらよいでしょうか?
以下のようにして変数cを作っても、変数cをBaseClient型としか認識してくれないので、s3関連のメソッドがオートコンプリートで出てきてくれません。
c = boto3.client('s3')

もちろん実行時はちゃんとs3の型になるのでコードを動かす事は出来るのですが、オートコンプリート無しはちょっときついので、なんとかして出す方法があれば教えてください。
0915デフォルトの名無しさん
垢版 |
2019/03/16(土) 18:30:45.43ID:SlIDoTSl
>>912
ライブラリでクラスを書くとはなんのことですか?
>>910
c++がわかりません
selfはメモリ領域を確保するために必要になるもの、という認識でいいんでしょうか?おそらくインスタンスを作った時点でメモリが確保されるのかと思いますが。
0917デフォルトの名無しさん
垢版 |
2019/03/16(土) 18:53:42.59ID:+8YpvTs6
>>915
・インスタンスを作成
・メモリ領域を確保
・self=インスタンス
この辺はもう全部イコールで考えても構わない

例外的にstaticやglobalでインスタンス外にメモリ領域を確保することも出来るけど

図で言うとこんな感じ
https://i.imgur.com/gNRp6HQ.png
0918デフォルトの名無しさん
垢版 |
2019/03/16(土) 19:28:51.03ID:sQCNGdE3
>>915
インスタンスを作った時点でメモリが確保は良い。でも確保にselfは関係ない
内部だと__init__より前に__new__が呼び出され、そこでメモリ確保が行われる
語弊を恐れずに言ってしまえば、selfはそのメモリがどこか位置を示すものだ

メリットがどうとかじゃない、sとs2は同じ型だが別物だろう、それを区別するために必要なんだ
0923デフォルトの名無しさん
垢版 |
2019/03/16(土) 22:04:48.14ID:/h3gEsxd
C言語使わない人にその教え方はどうなのよ。悪いことは言わないから「入門python3」を買って一通りやろう。
0925847
垢版 |
2019/03/16(土) 23:16:52.98ID:1E15fsAJ
インスタンスや、self がわからないの?
オブジェクト指向の基本だよ

self は、そのインスタンスを指す。
Ruby では、

class Cat
def initialize( name, weight )
@name = name
@weight = weight
end
end

p bob = Cat.new( "bob", 5 )
p alice = Cat.new( "alice", 4 )

new で、Cat というひな形から、各インスタンスを作る(実体化)

bob は、<Cat: @name="bob", @weight=5>
alice は、<Cat: @name="alice", @weight=4>

Rubyの、@name = name が、Python では、self.name = name になる。
Rubyではインスタンス変数は、@ で表すけど、pythonではself を付ける

インスタンス変数とは、各インスタンスで異なる部分。
一方、クラス変数とは、そのクラス(すべてのインスタンス)で共通の部分。

Rubyでは一々、selfを付けなくても良いように、Rubyの実装を、かなり頑張って作っている。
self.name よりも、@name の方がわかりやすいから!

オブジェクト指向・関数型は、Rubyで学んだ方がよい。
Python, JavaScript, Kotlin にも応用できるから
0926デフォルトの名無しさん
垢版 |
2019/03/16(土) 23:27:14.53ID:DylECkfT
>>925
> self.name よりも、@name の方がわかりやすいから!
アピールポイントそれだけ?
@がメンバ変数を表すなんて知らなきゃ分からんし、直感でも何となく察せるself.〜の方が分かりやすいと思うが
0927デフォルトの名無しさん
垢版 |
2019/03/16(土) 23:28:24.96ID:1G1aklbm
自分もPython初心者だけど
ttps://www.python-izm.com

ここのサイトめちゃくちゃわかり易かったので載せときたす。
0931デフォルトの名無しさん
垢版 |
2019/03/17(日) 02:01:28.71ID:QLspzkYx
>>937 ちらっとのぞいてみたが、目次が良くないね。
最初から順を追って進めて行く人にとっては良いかもしれないけど。
0936デフォルトの名無しさん
垢版 |
2019/03/17(日) 07:39:55.25ID:nAjwMdDd
変数がメモリ上にあって、その変数の場所を渡すのが参照わたし=self
ということでいいんですか?
0937デフォルトの名無しさん
垢版 |
2019/03/17(日) 08:24:23.53ID:HhaziKqA
参照渡しがどうこうはとりあえず忘れろ
今までの流れには全く関係ないから
0942デフォルトの名無しさん
垢版 |
2019/03/17(日) 11:41:11.52ID:R43k4iG5
内部的に参照渡しみたいなもんなんだからメモリの概念教えないと永久に理解できなく内科?
0944デフォルトの名無しさん
垢版 |
2019/03/17(日) 12:00:59.08ID:X1cUtWYO
参照渡しについて
C#のrefみたいなのを参照渡しと呼ぶ勢と
C++のhoge&みたいなのを参照渡しと呼ぶ勢がいるので
ややこしい
0950デフォルトの名無しさん
垢版 |
2019/03/17(日) 12:21:40.62ID:XvGPMByn
>>944
C#のrefとC++のhoge&はどちらも変数のエイリアスを渡すから一緒
紛らわしいのは「参照の値渡し」
0951デフォルトの名無しさん
垢版 |
2019/03/17(日) 15:27:46.05ID:9wVKFPUf
>>935-936
いやさ、記憶領域の話をし出すから皆メモリの話をした訳だけど
ポインタとか言い出すと、Python上にはポインタは無いけど
CPython等の実装は変数が全てポインタで実体に対する参照なの

参照渡しというと普通は変数に対する参照を言うので関係ないし
変数が入れ物とはC言語などのスタック変数を前提としてしまってる

そもそも実装以前に、OOPどころか構造体的な概念も分かってないのでは?
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況