くだすれPython(超初心者用) その41【Ruby禁止】
■ このスレッドは過去ログ倉庫に格納されています
★当スレに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/ ログイン必須になりやがった(゚Д゚#)
−−−−天麩羅ここまで−−−− 試験のためにpython勉強してんのか?
あほやん >>243
何食ってたら初心者スレでこんなに上から目線で不快な文が書けるんだろう 自分より弱い者に憎しみを抱くはずがないでしょう 抱くのは哀れみ >>243
>>print(AA()) #許されない
許されるだろ オブジェクトって変数+関数みたいなものと理解してる
だけど、pythonでlen()みたいな関数が存在してるのはなんでや
obj.len()みたいに書く方がオブジェクト指向ぽいのに(´・ω・`) うーんダンダーキモいな
objが__dict__属性もってるなら
obj.len = obj.__len__
obj.len()
はい >>254
必ずしも同じ名前のメソッドで要素数を取得できるとは限らないから
Javaの配列の.lengthとコレクションの.size()なんかいい例 >>154 pdf のキャラクターコードが違っていて、コピペでは、エラーが起きるから、やはり大きなサンプルはソースが提供されていることが必要だな。
2番目の大学の先生の【Python3入門】はサンプルソースも付いている。
math ライブラリーの関数一覧くらいは載せてても良いとは思ったが、贅沢は言えない。入門には必要ないと言えばそうかも知れないが。 vs codeでpythonを実行するときのコマンドはなんですか?
ターミナルから実行するのが普通なんでしょうか? あと、vsコードの補完は、pythonエクステンションに含まれているのですか? print() は、わかりやすいが、BASICみたいな ? と言うような自由な記法があっても良いのではと思ってたけど、関数がオブジェクトだから結構自由にできるんだね。
p = print
p(111)
#111 使い過ぎるとわけわかめになりそうだが。 >>262
vs codeとvsコードの表記の揺らぎを直すところからやってみよう! >>258
俺、Pythonを実質2週間ぐらいやっているんだけど
やり始めてすぐに>>254のような感を覚えた。
それなりの理由があるってことか(ちなみにJavaはさっぱり分からん)。
他の言語同様に、変数、メソッド名をアンダースコア(シングル、ダブルアンダー)で始めるとかで何かしらの意味を
与えていると分かっているんだが、目下あんまり調べてないからな。
プライベート変数がダンダーって見てすぐにわかるから良いと言えばその通りなんだがな pythonの関数名や変数名のアンダースコアは文法上は何の意味もなかったはず
そもそもpythonにはプライベートやパブリックの概念が存在しない
単に人間が見分けやすいようについけてるだけ >pythonにはプライベートやパブリックの概念が存在しない
これ知った時は俺驚いたよ。
privete、public等のキーワード付けて明確にしないのは、
Python教の哲学なんかと。 こんな記法を見たんだが、どう言う文法からこんなのが出てくるの? 3項演算子みたいなものだが。
短絡評価if と言うらしいけど。
i = 8
print(i%2 and'odd!!!!'or'>EVEN<')
#>EVEN<
短絡評価というのは先に成立した(True)方だけを見て後ろは見ないと言う方式みたいだね。
また、if が無くても評価式だけで成立するんだね。
print(0 and 2 or 5)
#5
print(1 and 2 or 5)
#2
しかし
print(1 and 2 )
#2
はなんとなく違和感がある。
そう言えば、3項演算子があってなんで2項演算子みたいなものが無いんだろうと思ってた。
3項演算子なら
2 if 評価式 else 5 が有って
2 if 評価式 が無いのが不思議だった。
評価式 and 値(0以外) がそれに当たるのか。
しかし、 1 and 2 の時どうして後ろの値が有効になるのかな? 短絡評価自体は理解しやすいんだが。
https://qiita.com/dinasetiana/items/2b0cb63e91e9511d1c6e
True and b
のとき何故、bの値を取るのか? 先後に成立した評価の値を取る?何故 True では無くbの値を取るのか? >>268
公式DOC>FAQにずばり詳解されてるので見るヨロシ FAQ は見つけられなかったけど、標準ライブラリの仕様書にしっかり書いてあった。
FAQの項目を教えてもらうとありがたい。
真理値判定
ブール演算 --- and, or, not
x or y x が偽なら y, そうでなければ x (1)
x and y x が偽なら x, そうでなければ y (2)
not x x が偽なら True, そうでなければ False (3)
さっと読み流した時は、and or は単なる論理的な演算だけだと思ってたから、値を取ると言う考えがまるでなかった。
注釈:
(1) この演算子は短絡評価されます。つまり第一引数が偽のときにのみ、第二引数が評価されます。
(2) この演算子は短絡評価されます。つまり第一引数が真のときにのみ、第二引数が評価されます。
(3) not は非ブール演算子よりも優先度が低いので、 not a == b は not (a == b) と解釈され、 a == not b は構文エラーです。 >>266
一応メソッドやメンバの名前の先頭に__(アンダースコア2つ)を付けると擬似的にプライベートになる(外から参照するとエラー)
実際は __名前 を _クラス名__名前 に置き換えるだけだが >>260-261
Code Runner という拡張機能で、右クリックメニューから、指定したソースコードの範囲を実行できる。
Ctrl+Shift+P で、Run Code でも同じ
>>254
Python は、Ruby よりも不自然。
Ruby, JavaScript みたいにメソッドチェーンしにくい
Ruby では、メソッド名を、シンボル: で渡せるから、処理の内容が明確
[1, 2, 3].inject( :+ ) #=> 6 >>261
c#の場合はターミナルからdotnet runで実行だと思いますが、pythonの場合はそういったものはないのでしょうか >>277 コンソールから直接ソースを叩けば動くよ。
hoge.py
hoge
或いは
python hoge.py
要は、exeファイルと同じ動作をする。だから、exploreから .pyをクリックしても起動する。
(ただ、コンソールが見えないとあまり解らないだろうけど。)
python は、コンパイルという作業がいらないから、
dotnet run の様にコンパイルの指定が必要ない。 >>277 だから普通にDOSコマンドの実行と同じprocess.start で良いのでは?
勿論、python が、インストールされている必要はあるが。
http://ni4muraano.hatenablog.com/entry/2017/07/08/233224
<略>
p.StartInfo.Arguments = @"/c python hello.py";
p.Start();
pythonがインストールされていない環境にpython のソースコードだけを渡しても動かないから、その場合は考慮の必要はありそうね。
PythonスクリプトをWindows環境で動くexeファイルにしよう
https://www.sejuku.net/blog/65881 >>279
>>280
たんにpythonと入れてからパスを指定すればいいだけなんですね
あと、右クリからもターミナルで実行ができました >>260
俺、いつもエディタ(geditやGeanyやVS code使ってる)の横にターミナル開いといて、
ソース保存→ターミナルで $ python3 xxx.py→エラー→エディタで編集・保存→ターミナルで再実行(↑&Enter)→ エディタで編集・保存....
てな感じでやってるんだけど、エディタから実行したほうがやっぱり便利なんですか? >>282
煽りとかじゃなくて逆に聞きたいんだけど、
vs code使ってターミナルで実行する意味(メリット)がわからないんだけど。
vs codeのブレークポイントとか利用しないって事? python書くエディタとIDEで人気なのは、pycharmとvscodeかね >>287
あれええな、組み込みターミナルがqtconsoleでインラインプロットもJupyter同様にできる
VSCodeでなんとか使えないかと試したけど無理だった
VSCodeが弱いFortranも書くので環境統一のためnvim+qtconsoleにした Eclipse にインストールしようとして、エラーが出てからほったらかし(超小声)
そもそも、venv anaconda eclipse が強調して動いてくれるんかよ。 >>266-267
意味はある
継承してみれば判る >>270
and は二つ目の条件も成立するかどうか評価するからな >>280
sejukuはクソだから貼らなくていいよ pythonでのWEBスクレイピングって、過去の更新情報も見れたりするのかな? >>294
Pythonやスクレイピングは魔法でも超能力でもありません The camel has two humps (working title)
Saeed Dehnadi and Richard Bornat School of Computing, Middlesex University, UK
February 22, 2006 初心者スレの内容に合うか分からないけど質問させて
最近は作るときに凝集度とか結合度、クラスの責務とかも気になるようになったんだけどじゃあ具体的にどう作るべきかが分からない
何をどう勉強しようか て状態なんだけどデザインパターンを学べばいいのかな?これも大切だけど自分が学びたい内容とは少しずれてるようで… >>283
すみません。見え張ってました。VS Codeは数回使ってみだけで、基本的に元通りgedit使っちゃってます。 NIC(ネットワークインターフェイス)が複数あるPCで、
requestsを実行する際にNICを指定してGETなりPOSTなりをしたいのですが、
方法が分かりません、requests自体にその手のパラメータはなさそうですが…。
どなたかお教えください。 >>301 NICを指定することはできないんじゃないの? そもそも何をしたいの?
複数のNICが同じLANに出ていけばどちらを経由しても行きつく先は同じだけど。
もしこんなことをやりたいのか?
NIC-1 >> LANのIP-1にだけ繋がってる
NIC-2 >> LANのIP-2にだけ繋がってる
それでIP-2につなぎたいからNIC-2を使いたいとか?
だったらNICなんか気にせずに接続しに行けばつながる方にしかつながらない。 >>302
分かりにくかったらすいません…
例として、PCにそれぞれ別のグローバルアドレスを持ったNICが二つあって(AとB)、
あるWebサーバーへの通信(=最終的にやりたいのはrequestsのGET/POST)はNIC-A経由で通信する、
また、別のWebサーバーへはNIC-B経由で通信する、ということをしたいのです。
かえって分かりにくいでしょうか…? >>303
説明が足りずすいません、上に書いたとおり、NICはそれぞれ別のグローバルIPを持っていて
且つ、通信先はインターネット上のWebサーバーです。
接続先によってNIC(というかソースIP)を使い分けて通信したいのです。 >>305
皆の質問の意図を理解できていないよ
なぜ、
>接続先によってNIC(というかソースIP)を使い分けて通信したいのです。
わざわざこんな使い分けをしたいのか、その理由を聞かれている
普通はソースIPを分けなくても接続できるから >>305 何か理由があってどうしてもやりたいのなら、ルータなりでIPルーティングをすれば出来るけど。
静的ルーティングの設定 - Linux
https://qiita.com/kooohei/items/b0931ae210911cc52adc
この場合だとNICの選択もできる。 >>306
そんなもんプログラムじゃなくてもっと下層層でやることや >>307
スクレイピングやWEB-APIを叩くときに、ratelimitが厳しいサイトがあるのでほんの少しそれを緩和したいのです。
ありがとうございます、ルーティングをいじってしまうのは最初に考えたのですが、環境は外部のVPSで(また説明不足ですいません)
基本リモートでいじっているので、そのあたりどうなるのかなぁと、明日また試してみます。
また、調べたところCurlとかだと何かIFを指定するパラがあるようですが、横着ですが今のコードをあまり変えたくなくて。 >>309 じゃ、curl と同じ様にしてみたら?
# curl -I --interface eth0 http://www.yahoo.co.jp/
#python
def message_api(request):
req = requests.post('http://www.yahoo.co.jp/' \
--verbose \
--get \
--interface=‘eth0’
--data 'text=おはようございます' \
--data 'appkey=xxxxxxxxx')
print(req) >>299
pythonで作って学ぶデザインパターンみたいな物がほしいね
オブジェクト指向が何となくわかっても使い方がよくわからん(´・ω・`) >>304
手動で、
Aが来たら有線LAN[A]を繋げて
Bが来たら有線LAN(A)を抜いて、有線LAN[B]を繋げる >>309
じゃあサブプロセス使ってcurlで実行しちゃえばいいんじゃないの? NICを指定してrequestsの件、Pythonで出来ました。
requests_toolbeltというmoduleを組み込むことで、ちょっと搦め手ですが、source IPからNICを
指定してmountすることが出来ます。(ここには参考になる人はいなそうですがw)
以上。 このスレに限るなら、叩かれているのはほとんどRubyガイジのせいだろ
目の前をうろうろする羽虫みたいなもんだ 劇場で数十年ぶりに復活したCity Hunter
冴羽獠の愛銃Python3xxと日本でも流行りのPython3の因果関係 デスクトップアプリはpythonとjavascriptどっちがいいんでしょうか >>324
Electronがあるから今の流行りは圧倒的にJavaScript
昔ながらのWinアプリが作りたいんならC# あっちこち手をつけるのも大変なのでjavascriptでやってみます
でもelectronッテメモリ悔いますよねなぜか なぜ32GBモデルにしなかったんだろ俺のバカバカ!ってね >>331
win10だと16gだと足りないよ。
ソフトによるけど。 昔ながらのデスクトップPCやサーバー機みたいな拡張とパーツ交換自在な時代なら最初16GBでも後から増設できたのに今時のモバイルなプログラム環境は半田付けされていて購入後に構成変更できないから辛いね 交換式にしたらスペース食うからねえ。
モバイルでもメモリとストレージは変更出来るってのも既に過去の話だな。
完全に買った時に全て決まるようになってしまった。 >>333 今時のPCでも、スロット数が少ないから、何年かしたらもうボードから買い換えるしか無いよ。
諦める事だな。
(全てが寿命に近づいてるから捨てる。)
ただ、買った直後にそのPCで動かないのがあったら、諦めて別の方法を探った方が吉。 PCはスマホやタブレット、2 in 1とかにコモディティ化&低価格化してきてるからブラックボックスで使い捨てになるのも仕方ないのかも >>336 もう何台もPCを自作してきたが、あとで拡張しようと思って作ってても、いざ拡張する時になると時代遅れで結局捨ててしまう。
だってメモリだって新しいメモリは使えないし、新しいCPUは使えないし、何が拡張だ。
ほとんど全てのパーツが寿命に近づいてるから全てを新しくした方が安心できる。 何度壊れて痛い目にあったことか。 横からだが、今時古いメモリやCPUでもそれほど違わん。
(最近はAMDのお陰で急速にコア数増えたが)
物欲抑えれば全然現役で行ける。
(それでも性能追うのが浪漫なのは否定せんが) IDEとOfficeとブラウザとテキストエディタとレタッチソフトとiTunesぐらいなら十分すぎるぐらいCPUは進化したけれど
4K以上の動画編集とかVRとかデスクトップ科技計算とかみたいなヘビーユースだとCPUもGPGPUも最先端を追うしかないね >>337
あるあるだな。
やはり買うときに思い切って買わないといかんな。
モニタやキーボードはタイミングずらす。車検が被らないように増車したりバイク買う感じ。 >>337
>ほとんど全てのパーツが寿命
今年思い知った件
ほんと>>340だは pythonのクラスメンバへのアクセスのことで質問です
クラスのメンバに次の2通りの方法でアクセスしたいのです。
(1)ピリオドを使ってアクセスする
(2)辞書のようにアクセスする
それぞれ単独では実現できるのですが、両方同時に成立させる
ことが出来なくて困っています。
最初に(1)のために次のように実装してみます
class Foo():
def __init__(self, x):
sel.x = x
@property
def x(self):
return self.x
@x.setter
def x(self, x):
self.x=x
これだとエラーになるためxを_xにすると上手くいきます
しかしそうすると__dict__がxではなく_xをキーとしてしまうため
def __getitem__ を実装してもキーはxではなく_xになるため
f=Foo()とすると
(1)のアクセスは f.x
(2)のアクセスはf["_x"]
ということになってしまうのです。
(1)も(2)も同じキーでアクセスできるように出来ないでしょうか? 追記ですみません
メンバ変数は値を更新した際に自動的に他の処理も呼びたいため
setterを必要としています。 x.setter()等の仕様がそうだから仕方ないんじゃ?
…
def __init__(self, x):
self._x = x
…
def get_x(self):
self._x = _x
x = property(get_x,set_x, del_x)
やってないけど あるいは中に仕込むか
@x.setter
def x(self, x):
self.x = x
self._x = x うちsandybridgeだけど当面買い換える予定ないぞ
グラボは入れ替えたが >>342
適当に辞書作ってsetattr,getattrをsetitem,getitemにマッピングすればOK
Class Foo():
_dic = {}
def __setitem__(self, key, val):
self._dic[key] = val
def __getitem__(self, key):
return self._dic[key]
__setattr__, __getattr__ = __setitem__, __getitem__
こうすれば
f = Foo()
f['x'] = 10
f.x
でアクセスできる ■ このスレッドは過去ログ倉庫に格納されています