Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JJUGナイトセミナー_JavaエンジニアがPythonでアプリ開発する時のTIPS

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for yoh629s yoh629s
September 06, 2019

 JJUGナイトセミナー_JavaエンジニアがPythonでアプリ開発する時のTIPS

【東京】JJUG ナイトセミナー: ビール片手にLT大会 9/6(金)

タイトル:JavaエンジニアがPythonでアプリ開発する時のTIPS

Avatar for yoh629s

yoh629s

September 06, 2019

Other Decks in Programming

Transcript

  1. 開発環境周り - パッケージ管理 • Pip • Mavenのpython版 • pypiリポジトリからパッケージをインストール •

    Mavenと異なり,パッケージはOSに直接インストール 案件ごとにプロジェクト切り替えたい場合は仮想環境の仕組みが必須。 pipenv,venv,pyenvなど。 • Pipenv • Pythonバージョンの切替と,パッケージ管理がファイルでできる • Pipfileに依存ライブラリが定義される。pom.xmlのようなもの [packages] flask = {version = “*"} TIPS: Pythonの場合は仮想環境ツールの用意が必要!
  2. 開発環境周り - コードドキュメント • Java • JavaDoc • Python •

    docstring JavaDocと違い,フォーマットが複数存在 Googleスタイル,numpyスタイルなど TIPS: 事前にdocstringのスタイルを決めておく! # Google Style def function_with_pep484_type_annotations(param1: int, param2: str) -> bool: """Example function with PEP 484 type annotations. Args: param1: The first parameter. param2: The second parameter. Returns: The return value. True for success, False otherwise. """
  3. 言語仕様周り - 型 • Java • 静的型付け言語 • Python •

    動的型付け言語 • Pythonを静的型付け言語で開発したい場合 • mypy pythonに静的型付けを取り込むライブラリ • 以下理由から案件では不採用 • Webで調査時に読み替えが必要 • 既存ライブラリがmypy使っていない # mypy def test(x: int) -> str: return "int to string {}".format(x) result: str = test(123) TIPS: pythonに静的型付けが必要か?案件ごとに見極めるべき!
  4. 言語仕様周り - インターフェース • Java 言語仕様としてある。interfaceで宣言,implementsで実装 • Python 言語仕様としては無し。abcというライブラリを利用して抽象クラスを定義する ダックタイピング

    • インターフェースなくても同じ関数が定義されていればポリモーフィズムを実現可能 "If it walks like a duck and quacks like a duck, it must be a duck“ (もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルに違いない) class AbstractHello(metaclass=ABCMeta): @abstractmethod def hello(self): pass TIPS: ダックタイピングはJavaにはない概念!
  5. 言語仕様周り - not • notの評価(Falseの評価)が異なる • String: not <string> ⇒空白・Null判定の場合True

    • Int: not <int> ⇒0の場合True • 以下のように,任意のパラメータを受け取る場合は注意! ## intの場合 print(not 0) # ⇒True ## strの場合 print(not str(0)) # ⇒False id = request.json['id'] if not id: print('idは必須です') TIPS: 動的型付け言語であることを踏まえたチェック実装が必要!