Python3関連のことを調べてみた2021年12月31日

Python3関連のことを調べてみた2021年12月31日

【Python】itertools.groupbyで作ったオブジェクトを後で使おうとすると中身がない

PythonでJoblibというライブラリを使って**itertools.groupby**(以下**groupby**)でグループ化したデータを並列実行処理したときに、なぜか上手く動かないことがありました。
解決後に判ったことをふまえて、原因を説明したいと思います。

# 起きたこと(再現)

JoblibというライブラリのParallelに**groupby**を使ったジェネレータを渡して、並列処理を実装しました。

“`python:
from joblib import Parallel, delayed
from itertools import groupby

# タグごとのメンバーを表示する
def view_members(tag, members):
print(f”Tag:{tag}”)
for member in members:
print(f”Name:{member[‘name’]} Birthday:{member[‘birthday’]}”)

# メンバーのデータ
props = [
{“name”: “Al

元記事を表示

FastAPIでBearerトークンを抽出する

小ネタ。

FastAPIで`Authorization: Bearer {token}`のようにヘッダで送られてくるトークンを使って認証したい場合に、トークン取得処理の自前実装が不要になる。

# コード

`Depends`を使ってDIチックに処理できるので嬉しい

“`python:dependencies.py
from fastapi import Request, Depends
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials

async def get_bearer_token(
request: Request,
bearer: HTTPAuthorizationCredentials = Depends(HTTPBearer)
) -> str:
credentials = await bearer(request)
token = credentials.credentials
return token
“`

`await b

元記事を表示

【Python3】@propertyで変数を疑似的にプライベート変数化して隠ぺいする

Pythonには変数をプライベート化(外部から参照・代入できなくする)する機能がありません。
ただしpropertyデコレータを利用するとそれっぽいものを実装することはできます。

## 環境
Ubuntu20.04
Python3.8.10

## propertyとは

Pythonの組み込みクラスで、オブジェクトの属性を操作する関数を実装しています。

#### 定義
“` property(fget=None, fset=None, fdel=None, doc=None) “`

– fget: 属性の値を取得する関数
– fset: 属性の値を設定する関数
– fdel: 属性の値を削除する関数
– doc : 属性のdocstringを作成する

基本的な使用方法は下記の通りです。(Pythonの公式ドキュメントから丸写し)

“`python
class C:
def __init__(self):
self._x = None

def getx(self):
return self._x

def s

元記事を表示

[Python]循環importになるケースでも型アノテーションができるケースがある、という話

# TL;DR

Pythonで2つのモジュール間でお互いにimportしており、且つその中でのクラスなどの型アノテーションをエラーにならずに対応できるケースがあるよ、という話です。

# 使う環境

– OS: Debian GNU/Linux 10
– Python 3.6

※個人で趣味で作っているPythonライブラリの最低バージョンの3.6に合わせているので新しいPythonバージョンではもしかしたら話が変わってくるかもしれません(そろそろPython 3.6のサポートを切っても良いかもですしね・・・)。

# 悩ましいPythonの循環importのエラーの話

他の静的型付け言語だと特に気になったりしないのですが、Pythonだと2つのモジュールでお互いにimportしあう形になっているとImportErrorになったりすることがあります。例えば以下のように`sample_A.py`というモジュールと`sample_B.py`というモジュールがあるとして、お互いに各モジュール内のクラスを型アノテーションなどでimportしている・・・といったケースです。

“`py:s

元記事を表示

pythonでクロージャを書いてみた

## 概要

決まりきった正規表現は何回もコンパイルする必要がないので、メモ化したいが、グローバル変数は使いたくないので、初めてクロージャを使って実装してみた
まだまだpython初心者なので、あんまりpythonらしいコードが書けてるかは自信がない

## 実装

“`python
import re
from typing import Callable, Pattern

def create_email_regexp_generate_func() -> Callable[[], Pattern]:
reg = None

def _email_regexp() -> Pattern:
# regへの参照を可能にする
nonlocal reg
if reg is None:
reg = re.compile(r”(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)”)
return reg

return _emai

元記事を表示

【Python Flask】初心者プログラマーのWebアプリ#3 【Javascript導入】【画像表示】【CSS適用】

# 今回のPython Flaskフレームワークで作るもの
今回はFlaskで静的ファイルを使用する方法について書きます。
前回はHTMLテンプレートを使って表示を作りました。簡単なデータ埋め込みです、表示を動的に作成していました。
今日扱うのは、「静的ファイル」を使ってページ作成です。静的ファイルは

– 画像ファイル
– CSS
– JavaScript

こんなものがあります。WEBページを作るときには必須の要素ですがファイルそのものを配置して、Flaskではとくに処理しないで表示するだけという、中身のデータが変化しないでそのまま使うようなものを静的ファイルって言います。

![html,js,css.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/4890a8f2-c20c-f9db-49e1-7ee6a89a84f7.png)

# :pushpin: Pythonで作るFlaskアプリ記事一覧

| | 内容|
|:—-:|:—-:|
|**part1**|[簡単なペー

元記事を表示

Python3エンジニア認定基礎試験

#意図
受験して合格できましたので、これから受験される方への一助になればと思い雑記を残します。
###私のバックグラウンド
・受験前からPythonの経験は多少あり
・ただ使う場面が偏っていたので、一度体系的に勉強してみたかったので受験を決意
・多言語の経験も多少あり
・職業プログラマではない
・飯を食っているのはインフラエンジニアとして
・仕事があるので、勉強に避けるのは土日メイン
#受験当日:メモ用紙等は配布されません
コードを追ったり、リストや文字列を数えたりするのにメモ用紙等があれば便利ですが、試験時にはそのようなものは配布されませんでしたし、持ち込みも不可でした。よって、問題はすべて目で追い、脳内ワーキングメモリで処理せねばなりません。勉強時に問題を解くときもメモ用紙等を使わずに回答できるようにしておきましょう。
#模擬テストと本番の違い
おそらく多くの方は、[DIVE INTO CODE](https://diver.diveintocode.jp/dive_into_exam/lp)様と、[PRIME STUDY](https://study.prime-strategy

元記事を表示

Pythonのsubprocessでkillが効かないときの対処法

# はじめに
Pythonの`subprocess.Popen`を使って,サブプロセスを起動・終了させようとしたが終了だけうまくいかなかった.
原因と対処法をメモしておく.

# 結論
この現象は,`subprocess.Popen`で`shell=True`を指定していた場合に発生する.

対処法は,`exec`コマンドを先頭にくっつけること.

“`python
subprocess.Popen(‘exec 実行するコマンド’, shell=True)
“`

# 再現手順
以下のように,`起動する側(run.py)`と`起動される側(wait.py)`の2つのスクリプトを書くと簡単に再現できた.

“`python:run.py
from subprocess import Popen
import time

p = Popen(‘python3 wait.py’, shell=True)
time.sleep(5)
p.kill()
“`

“`python:wait.py
import time

for i in range(1000):
print(i

元記事を表示

【Python3】プライベートなインスタンス変数にクラス外からアクセスできてしまう

Pythonのカプセル化について備忘録としてまとめます。

## 環境
* Ubuntu20.04
* Python 3.8.10

## 筆者の認識

– インスタンス変数の頭にアンダーバーを2つ着けるとプライベート変数として扱われ、クラスの外部から参照・再代入できなくなる。

“`python:Hoge.py

Class Hoge(object):
def __init__(self, hoge: str):
# 外部からアクセスできなくする
self__hoge = hoge

hoge = Hoge(“fuga”)
# エラーになるはず
hoge.__hoge = “foo”
# エラーになるはず
print(hoge.__hoge)
“`

## 実際の挙動

“`python:Hoge.py

class Hoge(object):
def __init__(self, hoge: str):
self__hoge = hoge

hoge = Hoge(“fuga”)

hoge.__hoge = “foo”

print(ho

元記事を表示

Python + TypeScriptのmonorepoでpre-commitの設定

## はじめに

やろうとした時に他にやっている人がいないくて、
色々調べてもなかったので備忘録として。

## よくあるやつ
* `TypeScript`

[Run a TypeScript type check in your pre-commit hook using lint-staged + husky](https://dev.to/samueldjones/run-a-typescript-type-check-in-your-pre-commit-hook-using-lint-staged-husky-30id) にあるように `husky` と `lint-staged` の組み合わせを使う

“`json
{
“scripts”: {
“prepare”: “husky install”
},
“lint-staged”: {
“**/*.{ts,tsx}”: [
“prettier –config .prettierrc –parser typescript –write”,
“git add”

元記事を表示

秋月のI2C接続有機ELディスプレイをラズパイ4に接続する

秋月で売ってる[有機ELキャラクタディスプレイモジュール 20字x2行](https://akizukidenshi.com/catalog/g/gP-08279/)をRaspberry Pi4に取り付けて制御したメモ。

先人の記事のプログラム(参考文献)をもとに色々改良してみる。

# 組み立て
16文字版も20文字版もピンの形は違う(16文字は1列、20文字は2列)
が機能は一緒。接続は次のとおりとした。

|I2C側|ラズパイ側|備考|
|:–|:–|:–|
|1 VSS|7 GND|1−3で短絡|
|2 VDD|1 3.3V|2−4で短絡|
|3 /CS|7 GND|1−3で短絡|
|4 SA0|1 3.3V|今回はSアドレスは1に設定。|
|7 SCL|5 SCL| |
|8 SDAin|3 SDA|8−9で短絡|
|9 SDAout|3 SDA|8−9で短絡|

将来的な拡張(ディスプレイ2枚差し)と短絡(分岐)のやりやすさを考え、ラズパイからユニバーサル基板を経由してI2Cのディスプレイに接続するようにした。

![イメージ図](https://qiita-ima

元記事を表示

【必見】django_restframworkでリレーションモデルをJSON形式で展開する方法

# 目的
DjangoRestframeworkでAPIを作成していて、

“`
{
“id”: “9510f7c1-a364-4e44-96ae-2fdd7fbc957d”,
“gender”: “M”,
“username”: “Shun”,
“age”: 25,
“introduction”: “よろしく”,
“job”:1
}
“`
このようなJSONをResponseとして返していたが、
このコードでは“`job: 1“`となっていてかなり扱いづらいJSONとなっているためなんとかしなければならないと思った。

# 解決方法
親モデルの利用するシリアライザの中に

“`
外部キー名 = 外部キーのテーブルのシリアライザ名()
“`
と記述するだけで外部キーのテーブルを展開できた。

# 具体例
django_restframeworkでModelViewSetを利用している。
Membersモデルの中にjobの外部キーがあり、Jobsモデルを参照している状態だ。
これに

元記事を表示

Using Docker-outside-of-Docker and Flask to use easily Docker inside the containers

## Disclaimer

Note that the approach presented in this article is **only meant to be used within a trusted network!**:

1. [Command injection](https://owasp.org/www-community/attacks/Command_Injection) codes are contained (as pointed out by my colleague and supervisor [E. Torii](https://qiita.com/eitaro-torii-dtws)).
1. Exposing `/var/run/docker.sock` gives the container root privileges of host (as pointed out by my colleague and supervisor [E. Torii](https://qiita.com/eitaro-torii-dtws)).

Aga

元記事を表示

︎︎

元記事を表示

【令和最新版】Switchのプロコンを連射パッド化してみた【スプラトゥーン2】

#デモ動画
これのやり方を説明していきます。

#用意するもの
– 一般的なスプラトゥーン2をする為の環境
– Switchをドックにセットして、外部ディスプレイを使用、
コントローラーはProコントローラーを使用、ネットはWi-Fiまたは有線LANでスプラトゥーン2をプレイしているものとします。

連射パッドを作成するためにさらに必要なものを書きます。

– パソコン(WindowsかMac)
– MicroSDカードにラズパイ用OSをインストールするのに必要です。
– 僕はWindowsなのでこの記事はWindows用の説明になります。
– (

元記事を表示

【Python Flask】初心者プログラマーのWebアプリ#2 HTMLテンプレート表示

第一回目は簡単な文字を表示をしただけでした。
今回はHTMLテンプレートを使って柔軟に規模を大きく綺麗に作っていきましょう。

![flask.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/cc80bb97-0728-0bf0-51f2-540cb0f46641.jpeg)

:::note
Flaskとで使われているテンプレートエンジンはDjangoも同じなので記法も当然同じ。
:::

# :pushpin: Pythonで作るFlaskアプリ記事一覧

| | 内容|
|:—-:|:—-:|
|**part1**|[簡単なページ作成](https://qiita.com/Bashi50/items/30065e8f54f7e8038323)|
|**part2**|**HTMLテンプレート表示 ← ココ**|
|**part3**|[“画像” “CSS” “Javascript”実装](https://qiita.com/Bashi50/items/f4c2eb42b9c

元記事を表示

Djangoのon_commitをテストする

overview

Djangoで開発していると、トランザクションを張る部分が出てきます。
そして、「このトランザクションがコミットされたらアクションを起こしたいな…」というニーズもあるはずです。
そんな時役に立つのがtransaction.on_commit。

“`py
from django.db import transaction

def do_something():
pass

transaction.on_commit(do_something)
“`
※ lambdaでラップすれば変数を渡すこともできる。 e.g. `transaction.on_commit(lambda: do_something(arg))`

通常はメール送信やcelery taskなど、投げっぱなしのactionで使用することが多いためテストを実装するというパターンは少ないかもしれない。
しかし、実際にテストするとなると簡単にはいかないのだ…

訪れるAssertionError

(検証用だからゴミコード許して)

“`py:views.py
from dj

元記事を表示

contextmanagerを使ったSFTPのconnection管理 (Paramiko)

# はじめに

[Zenn](https://zenn.dev/nslender/articles/586fc6979cbfdc)とダブルポストです。

[contextmanagerの実践例](https://qiita.com/n_slender/items/c08a0611449cfd4e802c) の続きです。今回はSFTPが題材です。SSH/SFTPのクライアントライブラリとしてよく使われるParamikoを使います。

# Paramikoでの実践例

パスフレーズ付きの秘密鍵を使った、公開鍵認証での例です。

“`python

from paramiko import Transport
from paramiko import RSAKey
from paramiko import SFTPClient

class SFTPService:

def __init__(self, host, port, user, private_key, pass_phrase):
self.host = host
self.port = po

元記事を表示

!cd と %cd の違い

# `!cd` と `%cd` の違いは?

Jupyter Notebookでは`!ls` `!cd`のようなシェルコマンドや,`%time` `%run`などの[マジックコマンド](https://ipython.readthedocs.io/en/stable/interactive/magics.html)が利用できます.

Notebook上でディレクトリを移動する場合,シェルコマンド`!cd`を使いたくなりますが,なぜかマジックコマンドにも`%cd`が存在しています.この違いは何でしょうか?

結論から言うと,

– `%cd`を使うとPythonの作業ディレクトリを変更できる.
– `!cd`を使うと新しいシェル内で`cd`を実行し,そのシェルは終了する.

つまりPythonの作業ディレクトリを変えたいときは`!cd`ではなく`%cd`を使います.

# 実際に試してみる

簡単に動作を確認してみます.個人的に[Google Colab](https://research.google.com/colaboratory/)をよく使うので以下はGoogle Colab上で

元記事を表示

kivyMD開発其の壱 初期公開篇

ハロー、Qiita!いかがお過ごしでしょうか。

すっかり街はというか街でなくてもクリスマスムード。なんだか胸騒ぎしそうでしなくもない
でもなんかソワソワする、そういった時期なのではないかと思ってしまいます(意味不明)。

:::note
先週日曜くらいに投稿しようと思ってたのですが、まんまと忘れていました:sweat_smile:
少し時差がありますがおゆるしのほどを:bow_tone1:
:::

今日はというと、先週お伝えした通りとタイトルの通り(こちらは分かりにくい)ですが、投稿
者自身のサンプルアプリケーションをリリースするということで投稿しています。

先に言っておくと、完成度はそれほどというか全然高くありません:sweat_smile:

ですが、以前から~~口走っていて~~お伝えしていたので、現段階の状態でリリースすること
としました。ではさっそくですが、ここからは本題とします。

## TodoApp

いつかのときに言っていたと思いますが、まずは簡単なものからということで副タイトルの
通りでアプリのことをお伝えしていきます。

どんなものなのかは見てみるに越したこと

元記事を表示

OTHERカテゴリの最新記事