Python3関連のことを調べてみた2020年11月26日

Python3関連のことを調べてみた2020年11月26日
目次

Pythonの関数を辞書(dict)のValueに格納して、Keyに応じた関数呼出しをする方法

##1. メソッド(関数)を宣言する

“`Python3:Python3
def sample_func_1(text : str) -> str:
add_text = “追加した文字列”
return (text + add_text)

def sample_func_2(text : str) -> str:
add_text2 = “追加した文字列バージョン2”
return (text + add_text2)

“`

##2. 辞書型(*dict*)オブジェクトの*Value*に、関数を括弧を付けずに記述する

“`Python3:Python3
func_dict = {
‘label_1’ : sample_func_1,
‘label_2’ : sample_func_2
}
“`

##3. 辞書型オブジェクト[*Key*ラベル名]()で、関数を呼び出して実行する

辞書(*dict*)のvalue値として、格納されているのは、関数(メソッド)オブジェクトそのものです。
そのため、関数(メソッド)を実行するには

元記事を表示

Pythonで依存型と篩型の型クラスを宣言できるコードをGitHubからDLしたら、うまく動いた!

##問題意識の所在

自作クラスを宣言するときに、定義するクラスが用いるデータ型に制約を与えるだけでなく、そのクラスのインスタンスが__持ちうる値の範囲や、長さの範囲についても制約を与える__ことができる言語は、__依存型や篩型の型クラスを宣言できる言語__として、知られています。篩型は、「ふるい」型と読みます。

__*Idris*__や__v6.11以降の*Racket*言語__が、これらの型を宣言し、静的な型検査を行うことができる言語です。

・[Dependent Types と Refinement Types の違い](https://7colou.red/blog/2018/07-07-difference/index.html)
・[Refinement Types For Haskell](https://goto.ucsd.edu/~nvazou/refinement_types_for_haskell.pdf)
・[型をさらに拡張するーーRefinement Typesについて](http://bugrammer.hateblo.jp/entry/2016/07

元記事を表示

Pythonで、配列要素のデータ型と、配列の長さを型検査する依存型ライクなメソッドを作ってみた

###定義したメソッド

自作クラスを宣言するときに、定義するクラスが用いるデータ型に制約を与えるのと同時に、そのクラスのインスタンスが持ちうる値の範囲や、長さの範囲にまで、制約を与えることができる言語は、依存型や篩型の型クラスを宣言できる言語として、知られています。

*Idris*やv6.11以降の*Racket*言語が、これらの型を宣言し、静的な型検査を行うことができる言語です。

・[Dependent Types と Refinement Types の違い](https://7colou.red/blog/2018/07-07-difference/index.html)
・[Refinement Types For Haskell](https://goto.ucsd.edu/~nvazou/refinement_types_for_haskell.pdf)
・[型をさらに拡張するーーRefinement Typesについて](http://bugrammer.hateblo.jp/entry/2016/07/21/152813)
・[LiquidHaskell のインス

元記事を表示

Window環境でなるべく汚さずPython環境を乱立させる。

# 0. はじめに
## 0-1. やること
Windowsで出来る限り環境を汚さず、Python環境を乱立させます。

## 0-2. 動作検証環境
Window 10 Pro Ver 1909 (Build 18363.1198)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210304/c40dc008-1ed6-ebb8-7230-a7d5df9f1688.png)

# 1. 手順
## 1-1. 作業フォルダの作成
お好みでフォルダを作成する。

“`
C:\Python
├ env ←Python格納フォルダ
└ project ←スクリプトファイル(*.py)格納フォルダ
“`

## 1-2. Pythonのダウンロード
以下のURLより、使用したいバージョンの「embeddable zip file」をダウンロードする。
例:python-3.8.6-embed-amd64.zip
https://www.python.org/downloads/window

元記事を表示

BLENano2で取得したセンサのデータをRaspberryPiで受信してPythonで活用する

#背景
IoTデバイスを作成するために、センサで取得したデータをBLEでRaspberryPiに送り、取得したデータを使ってRaspberryPiでアクチュエータ(モータやソレノイドなど)を制御したいと考えました。
そんなときに、BLEnano2というArduinoで開発可能なBLEマイコンボードがあることを知りました。今回はそれを用いて、圧力センサの検出値をBLE通信でRaspberryPiに送り、pythonで取得してみました。

BLEnanoとは?
![blenano.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193530/ef05b46e-169f-537d-8c4b-da61d2fc9b6a.png)

参考サイト:https://jellyware.jp/kurage/blenano/blenano_start.html
>・サイズが非常に小さい
>書き込み用ボードから分離してBLEマ

元記事を表示

Flaskのrequestsモジュールについて、すべてのメソッドを実行してしっかり理解する

PythonのFlaskでweb APIを作成することがあるのですが、クエリパラメータの読み込みなどちゃんと理解せずに使ってしまっているので、ここでは、http://127.0.0.1:5000 というURLをFlaskで立てて、そこにPOST通信とGET通信を試みた際の挙動について、requetstsモジュールのすべてのメソッドを実行して調べます。

## 方法

検証用のflaskの関数とcurlコマンドについて説明します。

### Flaskの関数

URLが叩かれたときのrequestモジュールをすべて実行するためのFlaskの関数はこちらです。

“`main.py
# coding: utf-8
from flask import Flask, request

app = Flask(__name__)

@app.route(“/”, methods=[“GET”, “POST”])
def hello():
request_methods = dir(request)
print(len(dir(request)),dir(request))

元記事を表示

MatplotlibをFlaskで拡張して、誰でもPythonで作成したグラフを見られるようにする

製造業やWeb制作会社だとPythonをインストールしているのが自分のPCだけだったりします。そんな時、PythonをインストールしていないPCでもMatplotlibでグラフを生成し、ブラウザを介して画像としてダウンロードする方法をメモします。

これにより、

* 誰にでもMatplotlibで生成したグラフにアクセスしてもらえる環境を構築する
* 自分のPCが非力な時、性能の良いサーバで画像を生成して効率化を図る
* めちゃめちゃ重いデータをあらかじめグラフ作成しておいてすぐ提供できるようにする

ことができるようになります。

## 方法と項目

方法は下記のとおりです。

* WebAPIを作成し、あるURLを叩いたらPythonの関数が走るようにする
* その関数の中でMatplotlibで画像を生成し、returnする

この記事ではそれぞれについて説明した後、さらに

* 本番環境でも耐えられるようにクラウドサービスの一つであるGCFにデプロイする方法と、
* そのAPIを叩いてcanvas要素に描写するHTMLのサンプル作成

までまとめます。
実際のところ、グラフの

元記事を表示

gunicornで起動するworkerに連番を割り振る

複数の Worker を起動するアプリケーションにおいて、各 Worker に一意な連番を割り振りたい場面があったのでメモ。

設定ファイルの`Server Hooks`を使えばワーカーの起動時に呼ばれる処理を定義できるため、ここでワーカープロセス毎に環境変数を設定する。

# 実装

FastAPI + gunicorn の例

`pre_fork`イベントを利用する

“`python:gunicorn.config.py
import os

workers = 4

def pre_fork(server, worker):
print(‘## called pre_fork’)
os.environ[‘WORKER_ID’] = str(server.worker_age – 1)
“`

“`python:main.py
import os
from fastapi import FastAPI

app = FastAPI()

worker_id = os.getenv(‘WORKER_ID’)
print(‘## WORKER_ID:’, wor

元記事を表示

Jupyter notebookでGraphvizを使う

#初めに
本記事ではGraphvizを使ったことがない筆者が**jupyter-notebook**で**Graphviz**を使うという内容になっています。ちなみにネットにはGraphvizの使い方など色々載っています。例えば

* [GraphVizのエラー対処(GraphViz’s executables not found)](https://niwakomablog.com/graphviz-error-handling/)
* [Graphviz をインストールする](http://ruby.kyoto-wu.ac.jp/info-com/Softwares/Graphviz/)

とかです。上記の2つの記事のどちらで設定しても使えるようになります。サイトを見てみてこれでいいかなと感じたらそれでもぜんぜん大丈夫です。今回は2つの記事を少しミックスして環境を作っていこうと思います。

#Graphvizとは
初めにGraphvizについて軽く説明していきます。以下のサイトを要約した形になっていると思います。

* [テキストデータをグラフ画像に変換するツール「Graphviz

元記事を表示

Python3: Google Cloud Translation API の使い方 (Advanced)

次のページを参考にしました。
[テキストの翻訳(Advanced)](https://cloud.google.com/translate/docs/advanced/translating-text-v3)

“`py:ex02.py
#! /usr/bin/python
#
# ex02.py
#
# Nov/25/2020
#
# ——————————————————————
import sys
from google.cloud import translate

# ——————————————————————
def translate_text(text,project_id):
“””Translating Text.”””

client = translate.TranslationServiceClient()
location = “global”

parent =

元記事を表示

Apple Silicon に python3 用google-cloud-bigquery ライブラリをインストール

Apple Silicon python3 google-cloud-bigquery インストール作業メモ 2020/11/25

python3はmacOS Big Sur にバンドルのものを使います。
もちろんこれはarm64対応(x86にも対応のUniversal)です。
$ which python3
/usr/bin/python3
$ lipo -archs /usr/bin/python3
x86_64 arm64e

pip3は直接呼び出すとwarning出るので回避
alias pip3=’/usr/bin/python3 -m pip’

1, ターミナルアプリを Rosetta(x86互換)モードで開く
[アプリケーション]-[ユーティリティ]-[ターミナル]を右クリック
[一般情報]-[Rosettaを使用して開く]にチェック
あとは普通にターミナルを起動

2, grpcインストール
$ pip3 install grpcio

3, ターミナルアプリを標準(arm64)モードに戻す

4, google-cloud-bigqueryインストール
$ pip

元記事を表示

AtCoder Beginner Contest 茶diff埋め

###[C – Ubiquity](https://atcoder.jp/contests/abc178/tasks/abc178_c)

“`Python3:Python3
n = int(input())
print((10**n-9**n-9**n+8**n)%(10**9+7))
“`

“`C++:C++
#include
#include
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include #include
#include

#define rep(i,n) for(int i=0; i<(n); i++) #define fixed_setprecision(n) fixed << setprecision((n)) #d

元記事を表示

【Python】ボタンをクリックしたら設定した文字列がクリップボードに保存されるソフト

はじめに

今回が初投稿の記事になります。改善点等があれば教えてもらえると幸いです。

最初は「パスワード管理ツール」という名前にしようと思いましたが、セキュリティ面や汎用性からこのようなタイトルになってしまいました…

もし、いい名前や説明方法が思いついたら教えてもらえると嬉しいです!

今回作成したもの

以下の画像になります。ボタンの色がうるさいのと見た目が…

各ボタンを押すと設定した文字列がクリップボードに保存されます。パスワードやよく使う文字列を設定しておくと便利だと思います。

百聞は一見に如かずと言うので実行してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/2ddf885d-5360-d2a5-8c64-1303ddcfbe36.png)

ソースコード

以下の画像がディレクトリ構造になります。この通りファイルを配置してもらえると実行できると思います。

ディレクトリ構造.png

元記事を表示

千葉県Go To EAT向けに店舗検索BOT(AI LINE BOT)を作った話(2)【概要】

千葉県Go To EAT向けに店舗検索BOT(AI LINE BOT)を作った話(1)の続きです。

システム構成は、以下の通りです。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/896062/2c41870f-d8f2-3078-dff8-10aff382cf13.png)

【フロー】
1.スマホでLINEのBOTを操作し、検索したいお店に関連するワードを入力します。
2.入力するとLINEのMessageing APIを経由してAI検索サーバ上のWEBサーバへhttpsリクエストが飛びます。
3.リクエストは、flaskで受け付け、検索ワードと類似度の高いお店をAIで判別します。
4.AIで判別した結果をもとに、データベースからお店に関する情報を返却します。

AI検索サーバはお金をかけないために、AWSで無料枠として提供されているt2.microを

元記事を表示

python json.dumpsでdecimalがある場合の対応

# はじめに
例えば、DynamoDBでint/float的な数値データを扱うと、データがdecimalとして取り出されます。こういったデータが含まれるようなqueryやgetしたアイテムに対してpythonの標準的なjson.dumpsを実行すると、変換できない型により例外が発生しましす。で、いつもこの対処方法を忘れるのでメモを残します。(類似でDatetime型で同様のことが起きます)
json.dumpsが型エラーで失敗したら変換関数を用意することで対処できます。

# そもそも
json.dumpsには引数としてdefaultを指定することできます。ここで変換用の関数をセットすることで対象外の型を自分でハンドルしてお好みの型に変換できます。
以下公式からの抜粋

> default を指定する場合は関数を指定して、この関数はそれ以外では直列化できないオブジェクトに対して呼び出されます。 その関数は、オブジェクトを JSON でエンコードできるバージョンにして返すか、さもなければ TypeError を送出しなければなりません。 指定しない場合は、 TypeError が送出され

元記事を表示

f文字列内部にDict形式を挿入できなかった

##f文字列内部にDict形式を挿入できなかった
“`python
in_folder=r”C:\Test”
name={
“OK”:r”OK.csv”,
“NG”:r”NG.csv”,
}
#NG
print(f”{in_folder}\{name[“NG”]}”))#シンタックスエラー
print(f”{in_folder}\{name[`NG`]}”))#シンタックスエラー

#OK
OK_file=”OK”
print(f”{in_folder}\{name[OK_file]}”))#”C:\Test\OK.csv”
print(“{}\{}”.format(in_folder,name[“OK”]))#”C:\Test\OK.csv”

“`

文字列はだめだったりするのかもしれない

元記事を表示

django でのファイルアップロード

#0.0 主な内容
django(本記事ではversino3.1)でのファイルアップロードに関してまとめます。
この記事を読むことで、
 1 テキストのアップロード
 2 画像のアップロード
 3 オーディオのアップロード
の方法について知ることができます。
主にdjangoやプログラミング初心者を対象とした記事ですが、djangoアーキテクチャの全体像について、基本的な内容は既知のものと想定しています。

また、本記事中では、
 1 post_fileディレクトリ下で下記のコマンドにてプロジェクトを開始し、

“`
$ django-admin startproject post_file .
“`
 2 その後template、static、mediaディレクトリを作成し、以下のようなディレクトリ構成になっている前提とします。

“`
$ project/(プロジェクトディレクトリ)
.
│── config/(設定ディレクトリ)
│ │── __init__.py
│ │── settings.py
│ │── urls.py

元記事を表示

Python3: Google Cloud Translation API の使い方 (Basic)

次のページを参考にしました。
[テキストの翻訳(Basic)](https://cloud.google.com/translate/docs/basic/quickstart?hl=ja)

“`py:ex01.py
#! /usr/bin/python
#
#
from google.cloud import translate_v2 as translate

text=”Es war einmal ein kleines Mädchen.”
target=”ja”

translate_client = translate.Client()
#
result = translate_client.translate(text, target_language=target)

print(“Text: {}”.format(result[“input”]))
print(“Translation: {}”.format(result[“translatedText”]))
print(“Detected source language: {}”.format(result[“

元記事を表示

PythonとHerokuでLINEBOTを作ってみた

Python学習の一環でオウム返しするLINEBOTを作ってみました。
#完成イメージ
![スクリーンショット 2020-11-23 210818.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/99228e67-a413-d364-f741-a7c8473f9c95.png)
![Image from iOS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/debd46d5-d1f5-ee9f-168a-25b60eb01761.png)
#環境構成
・Python
・Heroku
・LINE Developers
・Flask
#開発手順
1.LINE Developers 登録&設定
2.Heroku 登録&設定
3.Pythonで実装
4.再度LINE Developers 設定
5.Herokuへデプロイ
#LINE Developers 登録&設定
![スクリーンショット 2020-1

元記事を表示

Ubuntu18.04にCUDA10.1+cuDNN7.6.5+tensorflow-2.3.0をインストール

#はじめに
本投稿ではubuntu18.04環境でNVIDIAのGPUドライバ、CUDA10.1、cuDNN7.6.5、tensorflow2.3.0をインストールします。
環境は以下の通りです。
GPU : GTX1060
OS : Ubuntu18.04
Python : 3.6.9

**以下の参考手順は一例でありますの参考程度かつ自己責任でお願いいたします。**
またエンジニアではありませんので一部読みにくい表記などがございますが、ご容赦ください。

#機械学習のフレームワークについて
これまではtensorflow1.xx + kerasで学習を行っていましたが、tensorflow2についても興味があり、将来的なことも考えてtensorflow2に移行することにしました。
なお余談ですが使用中のGPUは将来的にはAmpere世代に交換予定です。Ampere世代ではCUDA11、cuDNN8が要求され、2020年11月時点ではtensorflow-nightly(2.4.0rc)で動作が確認されているとのことですが、正式版ではサポートはされていないようです。

#Tenso

元記事を表示

OTHERカテゴリの最新記事