旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【Python】 ジェネレータ式の生成

書籍”Effective Python”項目9のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

リスト内包表記は入力が大量な時に膨大な量のメモリを消費しかねない問題があるとのことで、代替としてジェネレータ式が紹介されていました(存在自体知りませんでした)。ジェネレータ式は周囲を[]ではなく()で括ることで生成できます。

# ジェネレータ式
iterator = (x for x in something)
next(iterator) # 評価
next(iterator) # 評価

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 リストから一つおきにデータを取り出す

書籍”Effective Python”項目6のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

サンプリングレートが高すぎるセンサのデータ数を減らしたいことがあったので、このような時に使えそうです。

a = [1,2,3,4,5,6,7,8,9,10]
# b = [1,3,5,7,9]
b = a[::2]

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 リストのコピー方法

書籍”Effective Python”項目5のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

リストのスライスの時に添え字startとendを省略するとコピーになる。

a = [1, 2, 3, 4]
# これだと参照。aを変更するとbも変更される
b = a

# これだとコピー。bはaの変更の影響を受けない
b = a[:]

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 PEP8スタイルガイドに従う

書籍”Effective Python”項目2のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

名前付けの規約

  • 関数、変数、属性 ⇒ lowercase_underscore

  • protected属性 ⇒ _leading_underscore

  • private属性 ⇒ __double_underscore

  • クラス、例外 ⇒ CapitalizedWord

  • モジュールレベルの定数 ⇒ ALL_CAPS

式と文の規約

  • インポートの順番は、標準ライブラリモジュール、サードパーティーのモジュール、自分のモジュールの順番に行う。各モジュールはアルファベット順にインポートする

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【WPF】 OxyPlotでグラフを描画する簡単な例

WPFでグラフを描きたい時はOxyPlotを利用しているのですが、頻繁に使うわけでもないため、使う度に同じことを調べる事態になってしまっています。そのため、OxyPlotの使い方に関する単純な例をメモしておきます。

1. NuGetからOxyPlot.Wpfをインストールする

2. (XAML)Windowにoxyを追加する & GridにPlotを追加する

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"
        mc:Ignorable="d"
        xmlns:oxy="http://oxyplot.org/wpf"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <oxy:Plot Name="PlotExample" Title="Example">
            <oxy:Plot.Series>
                <oxy:LineSeries/>
            </oxy:Plot.Series>
        </oxy:Plot>        
    </Grid>
</Window>

3. Axisを定義し、データをセットする

// これらのusingが必要
using OxyPlot;
using OxyPlot.Wpf;


// X軸の定義
LinearAxis xAxis = new LinearAxis
{
    Position = OxyPlot.Axes.AxisPosition.Bottom,
    Title = "x",
    Unit = "x unit"
};
PlotExample.Axes.Add(xAxis);

// Y軸の定義
LinearAxis yAxis = new LinearAxis
{
    Position = OxyPlot.Axes.AxisPosition.Left,
    Title = "y",
    Unit = "y unit"
};
PlotExample.Axes.Add(yAxis);

// ItemsSourceにデータをセットする
var points = new List<DataPoint>() { new DataPoint(0.0, 1.0), new DataPoint(1.0, 2.0), new DataPoint(2.0, 3.0) };
PlotExample.Series[0].ItemsSource = points;
// Plotを更新する
PlotExample.InvalidatePlot();


f:id:ni4muraano:20170715160706p:plain