Python関連のことを調べてみた2022年07月21日

Python関連のことを調べてみた2022年07月21日

【Python】andで繋いだ条件式はFalseになった時点で以降の条件式が無視される

どこかに記事がありそうな気もしますが、備忘録もかねて…。

## 実際にやってみる
以下のようなコードを実行する。

“`python:sample.py
a = 0

if b == 1 and a == 1:
print(‘passed’)
else:
print(‘failed’)
“`

変数 b は定義されていないが、一つ目の条件式に登場する。

### 実行結果
“`
$ python sample.py

Traceback (most recent call last):
File “aaa.py”, line 3, in
if b == 1 and a == 1:
NameError: name ‘b’ is not defined
“`

変数 b が定義されてないというエラーが出る。当然である

## 条件式の前後を入れ替える

コードを以下のように変更する。

“`python:sample.py
a = 0

if a == 1 and b == 1:
print(‘passed’)
else:

元記事を表示

PLCからゲートウェイでデータを取得しデータベースにJSONで保存 (3)

PLCからゲートウェイでデータを取得し、データベースにJSONで保存します。複数回に分けて、サンプルを用いて解説します。
前回は、ゲートウェイを用いてPLCからデータを取得し、ゲートウェイのメモリに保存しました。
[PLCからゲートウェイでデータを取得しデータベースにJSONで保存 (2)](https://qiita.com/COOLMAGICPRODU1/items/370b1bd37dca8a4fd9ae)

今回はこのデータをサーバに送信します。
![99f8027812fe841fafbb82cb316db3e062d514f019ff6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737842/57fae69b-42ac-b7b7-98e3-582e997dd10f.png)
サンプルで使用するゲートウェイは、引き続きWEINTEK製ゲートウェイの開発環境であるEasyBuilderのシミュレーターです。WEINTEK製ゲートウェイはサーバへのデータ送信に2種類のインタフェースを持ってお

元記事を表示

threadingをやめてasyncio&aiohttpで楽にPythonスクレイピングを行う

効率的なスクレイピングを行うにはリクエストとレスポンス間の待ち時間をなくすこと。これを実現するためにはthreadingモジュールでマルチスレッドか、asyncモジュールで並列処理をするかだ。

マルチスレッドは気軽に実装できる反面、デバッグが困難になる。asyncの非同期処理はコード量がやや増えるが、デバッグが楽。

この記事を呼んで我に返った

https://qiita.com/Toyo_m/items/992b0dcf765ad3082d0b

よし、threading使うのやめて、async使おうってことで試作したコードが以下

やっていることは、リクエストをしてスリープを1秒間を5回実行する(※スリープの理由は逮捕は嫌なので)

ネット環境によるのだろうけど、5回で2秒近くの処理時間の差が生まれる

“`python3
import aiohttp
import asyncio
import time
import requests

url = ‘https://qiita.com/osorezugoing/items/4ea5249c43c0ba8b89aa’
st

元記事を表示

bokeh: 第2のY軸を設定する

# 環境
* Python3.10.2
* bokeh 2.4.2

# やりたいこと
bokehで縦軸が2つの折れ線グラフを描画したいです。

# 解決
以下のコードで縦軸が2つの折れ線グラフを描画できます。

`extra_y_ranges`プロパティに軸の範囲を設定して、`add_layout`メソッドで軸を右側に追加しています。

“`python
from bokeh.models import DataRange1d, LinearAxis
from bokeh.plotting import figure, show

x = [0, 1, 2]
y1 = [0, 1, 2]
y2 = [0, 1, 100]

fig = figure(x_axis_label=”x”, y_axis_label=”y1″)
y_range_name = “secondary_axis”
fig.extra_y_ranges = {y_range_name: DataRange1d()}
fig.add_layout(
LinearAxis(
y_range_

元記事を表示

Pytorchで”e+”という指数表記を小数表記にする

# 指数表記はわかりづらい

torch.tensorをprintすると、”+e”という指数表記になって、意味が分かりづらいことがあるじゃないですか。

“`
[tensor([[1.14178e+01, 1.38472e+02, 1.03706e+02, 2.53196e+02, 9.22984e-01, 2.20000e+01],
[3.59220e+02, 9.41330e+01, 5.77640e+02, 2.87894e+02, 9.12798e-01, 1.90000e+01]], device=’cuda:0′)]
“`

それを、普通の小数表記に変えたい。

# torch.set_printoptions

“`python:print_option.py
torch.set_printoptions(sci_mode=False)
print(some_tensor)
“`

これで、小数表記になります。

“`
[tensor([[ 11.41777, 138.47192, 103.70560, 253.19629,

元記事を表示

pydanticについて書く

ためになる話、ざっと書く。(書き殴りなのでご容赦ください)

https://pydantic-docs.helpmanual.io/

dataclassと比較したり、便利だったこととか書いておきます。

## defaultの値の設定について

### dataclass

“`python:ダメなdataclassの定義
from dataclasses import dataclass

@dataclass
class DataClass:
test_str: str
test_default: str = ‘default’
test_int: int
test_list: list[int]
“`

“`:dataclassはdefaultは最後に定義する必要がある
TypeError: non-default argument ‘test_int’ follows default argument
“`

### pydantic

“`python:defaultの順番は気にしなくて良くなる
class PydanticCla

元記事を表示

__init__から関数を呼び出す(python)

pythonでクラスをインスタンス化した際に
一定の処理を既にしておいて欲しいことがあった。

そこで__init__に今更だが着目し、
initの時点で関数を呼び、一定の処理すればよいのでは
と思った。

やってみる?
“`calc.py
class calc:
def __init__(self, numA, numB):
self.numA = numA
self.numB = numB
#インスタンスメソッドの結果をメンバに格納
self.sumResult = self.sum()

def sum(self):
result = self.numA + self.numB
return result

calc = calc(5, 5)
print(calc.sumResult)
#出力結果: 10

“`
以上です!

元記事を表示

DIS: Highly Accurate Dichotomous Image Segmentation やーる(Windows10、Python3.9)

# はじめに
画像セグメンテーションのDISやっていきまーす

# 開発環境
– Windows10 PC
– Python 3.9
– Anaconda

# 導入

1.[DIS](https://github.com/xuebinqin/DIS)をクローンします

~~~
conda activate py39
git clone https://github.com/xuebinqin/DIS.git
cd DIS/IS-Net
~~~

2.requirements.txtについては後で書くかもしれない(U^2Netが動いていれば動くかも)

3.[isnet.pth](https://drive.google.com/file/d/1KyMpRjewZdyYfxHPYcd-ZbanIXtin0Sn/view?usp=sharing)をダウンロードし、saved_models/IS-Netに置きます

4.推論のためにtrain_valid_inference_main.pyを修正します

664行目
~~~
valid_datasets = [dataset_vd] # d

元記事を表示

Kaggle・機械学習に関する有益情報まとめ

kaggleや機械学習についての良記事と,その記事で扱っている内容を簡潔に書きました.

### Pytorch

[Pytorch入門](https://atmarkit.itmedia.co.jp/ait/subtop/features/di/pytorch_index.html)
テンソル操作のチートシート,モデル定義,損失関数,オプティマイザ,評価関数の定義

[Pytorchチュートリアル(日本語)](https://yutaroogawa.github.io/pytorch_tutorials_jp/)
モデル定義から,画像認識,自然言語処理,強化学習の実装までの解説

### データ加工
[データサイエンス100本ノック](https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess/tree/master/docker/work)

[Pandas100本ノック](https://qiita.com/kunishou/items/bd5fad9a334f4f5be51c)

### 特徴

元記事を表示

python 落ち物パズルゲームの作り方 -tkinter-

マウスの座標とクリックの判定

“`python
import tkinter

mouse_x = 0 #マウスのx座標
mouse_y = 0 #マウスのy座標
mouse_c = 0 #マウスの判定 0か1

#引数のeがマウスの位置
def mouse_move(e):
global mouse_x,mouse_y
mouse_x = e.x
mouse_y = e.y

def mouse_press(e):
global mouse_c
mouse_c = 1

def mouse_release(e): #フラグを降ろす
global mouse_c
mouse_c = 0

def game_main():
fnt = (“Time New Roman”, 30)
txt = “mouse({},{}){}”.format(mouse_x,mouse_y,mouse_c)
cvs.delete(“TEST”) #文字を一旦初期化
cvs.create_text(456,384,text=txt, fi

元記事を表示

DjangoでGraphQLを触ってみるPart.3 (データ操作編)

# はじめに
[DjangoでGraphQLを触ってみる Part.2](https://qiita.com/abemaru/items/cc862c548cdec65fa640)の続きです。
今回は、データの追加、削除、編集(Mutation)を実装します。

今回もdockerを使う前提で説明をします。詳しい内容は[私のgit](https://github.com/abemaru/my_graphql_demo)を参考にしてください。

# パート解説
### [Part1 : 入門向け環境構築と基本的な書き方](https://qiita.com/abemaru/items/fcd64145168e7267e615)
### [Part2 : GraphQLでリレーションなしの絞り込み実装](https://qiita.com/abemaru/items/cc862c548cdec65fa640)
### Part3 : データ追加、削除、編集(Mutation)の実装 ←イマココ

# 実装
## データ追加
まずはデータ追加を実装します。`.save()`を使うと簡単に実装

元記事を表示

[python] 仮想環境

# はじめに
pythonでツールなどを開発する際に、用途によって必要なライブラリを含んだ実行環境を作成し、その環境下で開発を行うのがスタンダードである。
仮想環境を活用することで、PC上にあたかも別マシンで動くようなpython環境を構築できる。
つまり、独立して動くため同じシステム内の環境を汚したり競合なく開発が行えたり、作成したツール配布の際に実行環境を揃えられるため、ライブラリの差異で動かないといったことが解消できるといったメリットがある。

運用としてbaseのライブラリは汚さずに、仮想環境ごとに必要なライブラリを揃えるといった感じが良さそうだ。

# 仮想環境の種類
次の3種類の仮想環境がよく使われている様子

|名称|特徴|
|—|—|
|venv|・標準仕様なので安心感あり(Python Ver3.4以降)
・すぐ使える|
|conda|・Anacondaパッケージに標準搭載|
|virtualenv|・サードパーティ製なのでpip installが事前に必要
・venvより構築が少し楽|

# venvでの環境構築から有効まで
WindowsOSに

元記事を表示

[Python] The Multithread in Python, GIL

# Introduction

In Python, if you run some calculation with multithread you will find that it takes almost the same time, no matter how many thread you use. For example for the code bellow, it just do a plus operation in a for loop, with 1 thread or 4 thread, in my 4 core cpu laptop, all took almost 4 seconds.

“`py
import threading
import time
from datetime import datetime

def run(n):
tot = 0
for i in range(0, n):
tot += 1

start = datetime.now()

a = 100000000
n = 10

th = []
for i

元記事を表示

Pythonのsubprocessでコマンド標準出力を取得しつつコンソールにも表示したい

## はじめに

Pythonのsubprocessでコマンド実行時

– その標準出力を文字列として取得したい
– 同時に、コンソールにもリアルタイム表示したい

といった場合の実装例です。

## 仕様

– MyConsoleクラス
– パイプを作成し、読込み用と書込み用のファイルディスクリプタをクラスメンバーに指定
– スレッドを作成し、下記処理を行う
– パイプにデータ存在するまで読込む(4KB単位)
– 取得データをシステム標準出力に書き込む
– 同時に、データを結果文字列にも追加
– subprocess.run()でコマンド実行
– stdoutパラメータにMyConsole書込み用ファイルディスクリプタを指定

## コード

Windowsのサンプルコードです。

“`test_console.py
import threading
import os
import sys
import subprocess

class MyConsole:
def __init__(self):

元記事を表示

pythonでyeelightのWorking with Flowを使ってみた

## Working with Flow
[python-yeelight](https://yeelight.readthedocs.io/en/latest/flow.html)のドキュメントを読んでいると、あらかじめ電球の遷移状態を設定しているFlowというモードがあるそうです。
>“Flow” is a special mode the bulb can be set to, which is basically a list of transitions to perform in succession. For example, a flow can be a constant cycling of colors from one to the next, until it is stopped, or it can be a quick blink of a certain color

久しぶりにyeelightを使ってみたかったので、”Flow”の動作を確認できる環境を作ってみました。

## 環境
Python version:3.9.7
OS: windows 1

元記事を表示

ABC260 A~D問題 ものすごく丁寧でわかりやすい解説 python 灰色~茶色コーダー向け #AtCoder

ABC260(AtCoder Beginner Contest 260) A~D問題の解説記事です。
灰色~茶色コーダーの方向けに解説しています。

その他のABC解説、動画などは以下です。

更新時はツイッターにて通知します。

https://qiita.com/sano192/items/54accd04df62242b70f0

# A – A Unique Letter Dif:12

https://atcoder.jp/contests/abc260/tasks/abc260_a

単純にa,b,c,…,zまでSに1文字だけ存在するかを確認していきましょう。
(文字列).count(文字)とすることで(文字列)に(文字)がいくつ含まれるか確認できます。
例えばSに「a」がいくつ含まれるか確認するなら以下のようになります。

“`python:
S.count(“a”)
“`

これが1ならば「a」が答えになるというわけです。
答えを出力するときは「”a”」というようにダブルクオーテーションで囲みます。これは

元記事を表示

Tweepyの’API’ object has no attribute ‘me’

## はじめに
Tweepyのバージョンを4.10.0に上げたら怒られたメモ

## API.meの廃止

`AttributeError: ‘API’ object has no attribute ‘me’`

実行したときにはAPI.meで例外が吐かれました。

[https://github.com/tweepy/tweepy/blob/master/docs/faq.rst#where-did-apime-go](https://github.com/tweepy/tweepy/blob/master/docs/faq.rst#where-did-apime-go)

faqにある通り3から4で廃止されたようです。代わりとして`API.verify_credentials`を使えばよいと書かれています。

“`python
auth = tweepy.OAuth1UserHandler(
CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET
)
api = tweepy.API(au

元記事を表示

3の倍数・3のつく数字だけアホになるプログラム①(小学生高学年向け・python)

この記事は、岩手県八幡平市のプログラミング教室「アクセルキャンプ」の公開教材です。
[アクセルキャンプ(フリースペースプラウド)のリンク](https://freespaceproud.com)
教材の作成依頼等も承っております。ご意見等は、リンク先の問い合わせ欄からお願いします。
教材の転用・利用等は自由です。

# (小学生)アクセルキャンプ高学年クラス7/20
# 「3の倍数と3のつく数だけアホになる」プログラム
(参考動画:[世界のナベアツ](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=video&cd=&cad=rja&uact=8&ved=2ahUKEwixldHDoYb5AhUTAYgKHcjhDxkQtwJ6BAgLEAI&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DS3sxqexw6pU&usg=AOvVaw1aczeZv8yXkUjdpGJOyQK7))
プログラムの使用は以下の通りです。
>①まず、1から30までの数字を連続で出力す

元記事を表示

PyG (PyTorch Geometric) で GAT (Graph Attention Networks)

グラフ構造を深層学習する PyG (PyTorch Geometric) を Google Colaboratory 上で使ってみました。まずは GAT (Graph Attention Networks) を用いて、node property prediction (頂点のラベルを予測)です。

# PyG (PyTorch Geometric) インストール

PyG (PyTorch Geometric) のレポジトリは https://github.com/pyg-team/pytorch_geometric にあります。

“`python
import os
import torch
os.environ[‘TORCH’] = torch.__version__
print(torch.__version__)

!pip install -q torch-scatter -f https://data.pyg.org/whl/torch-${TORCH}.html
!pip install -q torch-sparse -f https://data.pyg.or

元記事を表示

ターミナルのインタープリターを使って文字列+連番を出したい!

# はじめに
仕事してて
“`
hoge430,hoge431,hoge432,hoge433,hoge434,hoge435,hoge436,hoge437,hoge438,
“`
みたいな文字列+連番みたいなのをぴゃぴゃっと出したいなーって思ったんですよ。使う用事があったんで。
で、こういうのってターミナルの各言語のインタープリターを使うとやれるんですけど、どうやったっけなー、と思いまして。
備忘録的な感じで。

# Ruby

まずはRubyです。Rubyがこういうの一番簡単に行けたイメージあったので。

“`bash
$ ruby -e ‘(430..438).each do |i| print “hoge#{i.to_s},” end’
“`

簡潔でいいですね。

ちなみにfor文使うとこうです。結局コレでも内部的には`each`が動いているんだそうです。

“`bash
$ ruby -e ‘for i in 430..438 do print “hoge#{i.to_s},” end’
“`

@scivola さんからコメントで頂いたのですがこんな書き方も

元記事を表示

OTHERカテゴリの最新記事