PyQオフィシャルブログ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

PyQで複数行をコメントアウトしたい

こんにちは。かめちゃんです。

今回はあまり知られていない複数行コメントの付け方を紹介します。

Pythonの文法

Pythonのコメントは文字列以外でハッシュ文字(#)から始まり、その行の最後までがコメント(プログラムから無視される)となります。

PyQで複数行をコメントにする

PyQで複数行をコメントにするには、下記の手順になります。

  • WindowsですとAltキー、MacOSですとoptionキーを押しつづけます
  • マウスポインターが十字になったら、マウスを左クリックしながら行の先頭をドラッグします。すると薄い線がでます。

f:id:kamekokamekame:20170920162046p:plain:w500

  • 一度キーを放して、ハッシュ文字(#)を入力します

f:id:kamekokamekame:20170920162050p:plain:w500

コメントを消す場合は同じようにすでに書いてある行頭のハッシュ文字(#)の後ろあたりを一列選択し、削除します。 また、入力を間違った場合はControlキーzキーを同時に押すと処理が戻ります。

PyQの問題を解いたあとに気になる処理を書いて試してみるとさらに理解が深まりますので、是非、お試しください (*^_^*)ノ

pyq.jp

PyQの領収書に宛名を設定できるようになりました

id:hirokiky です。

発行してもらった領収書に必要な項目が書いていないと困ってしまいますよね。 今回はPyQの発行している領収書で宛名を設定できるように改善しました。

f:id:hirokiky:20170925113542p:plain

宛名の設定方法

アカウント設定画面 から「姓」「名」を入力することで宛名として設定できます。

f:id:hirokiky:20170925113730p:plain

宛名を設定するには、姓名を入力しない場合は空白が入力されますので、好きな宛名を記載いただけます。 会社に申請したい。個人事業の経費として扱いたい場合などにご活用ください。

今回は小さな変更でしたが、次に学習する内容を悩まなくて済むようにしたり、チーム内での相互学習をより促進できるような施策も計画中です。

今後もPyQに関わるすべての方が、ストレスなくスムーズにプログラミングの学習ができるプラットフォームを目指してまいります。

pyq.jp

PyQメンター相談会9月を開催、Djangoのモデル設計支援とプロジェクトのレビューをしました

id:hirokiky です。

Djangoで開発していて、モデル設計がうまくいかない、Djangoのプロジェクトがちゃんと書けてるか不安、 settings.py があっているか分からないという悩みは多いのではないでしょうか。

今回のPyQ メンタープラン相談会では、そういった自分でDjangoアプリを作るうえでの悩みを解決できました。

pyq.connpass.com

例えばこんな悩みです。

  • 今までのモデル設計ではうまくいかない部分がでてきたけどどうすれば?
  • Djangoで静的ファイルの配信を設定したけど、やり方はあっていそう?
  • 全体的にプロジェクトをレビューして、悪いところありそう?

たしかに単純に質問するには難しい内容も多くありますね。 全体感や設定のレビューというのも、Web上に公開するわけにはいかないので難しいと思います。

ご相談いただいた内容から一般的な内容だけでもご紹介できればと思います。

マスターデータを変更すると、履歴データにも影響してしまうけどどうすれば?

今回は、既存アプリでマスターデータを変更すると、履歴データにも影響してしまうけどどうすれば良いか?というお悩みでした。 履歴データからマスターデータへのリレーションを持って管理していたので、マスターが変わると履歴の情報(例えば商品価格)も変わってしまいます。 履歴の情報なので「その当時の」情報が必要なわけです。

解法としては、履歴側にも履歴を残した当時のマスターの情報を一部、コピーするよう提案しました。 データとしては非正規化されてしまうようですが、「履歴当時の情報」として残しています。 例えば、購入履歴モデルの購入時の商品の価格フィールドに保存しておく、などです。

それに合わせて一緒にプログラムを修正して、相談会の間に問題を解決できました。

また、既存の履歴データに非正規化したデータを入れる方法をお伝えしました。 今回はDjangoでのデータマイグレーションを使ったやり方、データマイグレーションの作り方をご説明しました。

Djangoの設定、プロジェクト全体のレビュー

あとはお客様のDjangoプロジェクトを見て、問題のある部分が無いかをレビューしました

  • レビューしてみて全体的に問題ある実装はなさそうでした
  • 静的ファイル配信に WhiteNoise を使うのも、今のアプリ的には良さそう。使い方も良さそう
    • Nginxなど考慮せず簡単に静的ファイルを配信する場合は WhiteNoise を使うと良いです
    • アクセス頻度の高くないWebアプリだったので、WSGIミドルウェアから静的ファイルを配信しても問題なしと判断しています
    • WSGIサーバーのワーカーを食わないために、Nginxからやるほうが良いです
  • Django内での静的ファイル、CSSの置き場所も良さそう
  • 継承元になるテンプレート base.html でメインになるCSSを読み込むのも良い
  • プログラムはできれば、PEP8は準拠したほうがいいと、細かい話ですが提案
    • PEP8は見た目の良さもありますが、書式を合せることで複数人で開発した際のDiffの衝突が起こりにくい利点もあります
  • myproj/urls.py は、今後大きくなって辛くなってくればアプリごとの urls.py に分割していけます、と提案しました
  • 他settingsレビュー、細かいところを指摘
    • settings.py 内で from local_settings import * として、ローカル用の設定を上書きするのであれば、ファイルの一番下に書かないと意味がありません
    • 似た設定同士はまとめて書かないと色んなとこに書いちゃって混乱してしまう(例えば STATIC_ 系ならそれでまとめて書くこと)
  • 要らないライブラリー、settingsがないか確認
    • いくつか要らないものを削除

まとめ

たしかにDjangoのプロジェクトの設定方法や、セキュリティー上問題ないか?などは疑問が残ったままになる点ですね。 色々な情報を参考にして設定していくと、 settings.pyurls.pyrequirements.txt もゴチャゴチャしてきてしまいます。 PyQのメンタープランではそういった悩みにも応えられます。

また、今の PyQ の学習カリキュラムではこの点はカバーできていないところだと思いました。 settings.py やマイグレーション、セキュリティーやデプロイについても学べるプラットフォームになれればいいなと思います。

pyq.jp

Pythonでの環境構築はどうすべきですか?

こんにちは。PyQ開発チームの清原 id:hirokiky です。

今日も PyQ のメールサポートで何度かいただいた質問の紹介をします。

質問

Pythonのインストール方法としてpyenv + virtualenvでの環境構築が検索上位にきますが、 pyenvは使うべきなのでしょうか? venvが主流なようですがどうするのが良いでしょうか?

回答

Pythonの環境構築に関して回答させていただきます。

ご指摘の通りPythonの環境構築の方法はいくつかございます。 それぞれ利用者によってユースケースが違うため、なかなかベストプラクティスと 一概にお答えするのは難しいですが、参考になりそうな情報をお伝えさせていただきます。

ymotongpoo.hatenablog.com

qiita.com

ymotongpoo.hatenablog.com

qiita.com

qiita.com

上記URL群はそれぞれのツールの説明、環境構築方法等の 内容がまとまっておりますので参考にしていただければ幸いです。

あくまで私見ですが、pyenvやAnacondaを使った環境構築はデータ分析/機械学習を 主目的にした方が利用されることが多いようです。

一方、Pythonが標準で用意しているvenvとpipによる環境構築は、それ以外の より幅広い活用を念頭に置いた方が利用されてるイメージがあります。

PyQに関してましては、データ分析/機械学習の分野は今後は注力してまいりますが、 それ以外の幅広い領域も扱って行きますため、現状ではpyenvやAnacondaの利用を 積極的に推奨するということはありません。

pyq.jp

Pythonの関数(オブジェクト) と オブジェクト.関数() の違いは何ですか?

こんにちは。

Python、ひいてはプログラミング言語全般な悩みではないかと思います。 何人かの方にご質問いただいたのでブログでも回答いたします。

Pythonの関数(オブジェクト) と オブジェクト.関数() の違いは何ですか?

これは少しヤヤコシイ問題ですね。

例えば len("文 字 列")"文 字 列" の長さを取得する関数なのに、 "文 字 列".split() は文字を空白文字で分割する メソッド (オブジェクト.関数) ですね。

基本的にはメソッドの場合は、そのオブジェクト固有の処理が多いです。 例えば "文字列".split"文字列".startswith などです。これは文字列固有です。

ですが len は文字列にも、リストにも使えます。 len("文字列") len([0, 1, 2]) なのです。こういった場合は、Pythonでは関数で用意されています。

また、printなどのように特定のオブジェクトの型に関係しない場合も関数で用意されます。


PyCon JP 2017で清水川氏の発表がこの質問と近い内容でした。あわせてご紹介します。

清水川氏の発表のスライドです。

goo.gl

動画もあります。

www.youtube.com

詳しくは、PyCon JP 2017 1日目 参加ログ #pyconjp — 清水川Webを参照ください。

PyCon JP 2017 トークの沢山の動画がYoutubeで公開されています。興味があるタイトルなどを探してみるのも秋の連休の長い夜の楽しみになりそうですね。

www.youtube.com