LoginSignup
6
11

More than 5 years have passed since last update.

はじめてのPython雑多メモ

Last updated at Posted at 2017-07-10

はじめてのPython、調べたことはメモっとく。
当方の経験言語は、ActionScript3、C、C++、C#、JS。

import

socket

通信周りを扱えるようになる。
Pythonによる通信処理
17.2. socket — 低レベルネットワークインターフェース
Man page of SOCKET

socket.socket()

ソケットの作成。

socket.setsockopt()

ソケットのオプションを設定。

socket.SOL_SOCKET

ソケットレベル?どのソケットの場合でも、とりあえずこれを指定するぽい

socket.SO_BROADCAST

ブロードキャスト設定。

socket.AF_INET

IPv4 インターネットプロトコル

socket.SOCK_DGRAM

データグラム (コネクションレス、信頼性無し、固定最大長メッセージ) をサポートする。
UDP通信ではコレを指定する。

random

乱数の関数を扱えるようになる。
数値(ランダムな値)の生成

RPi.PGIO

RasPiでLチカしようとしたときに見つけた文。
as は別名を名付けするためのもの。

import RPi.GPIO as GPIO

Pythonのモジュールインポートのしくみ
Raspberry PiでPythonのRPi.GPIOを使ってLチカする

インデント必須

これはよいかも。

print

コンソールへの出力。
ダブルクォーテーションとシングルクォーテーションでの文字列の表示には差異はないのか?

print "bufferSize : " + size

的な感じで出力しようとすると、
TypeError: cannot concatenate 'str' and 'int' objects
と、「型を混ぜるんじゃねぇ」と怒られる。

print "bufferSize : " + str(size)

キャストしてあげるとOK。
か、

print "bufferSize : "
print size

それぞれ出す。
すこしめんどい。

セミコロン不要

いれてもよい。

Terminalでのヴァージョンの確認

$ python --version

python 2系と3系ではだいぶ違う感じか?

型指定不要

動的型付けしてくれる。

文字列に代入

msg = "%s:%s" % (1, 100)  # 1:100

Pythonメモ:文字列に値を代入する際

関数 def

def文で関数(functino)を定義することが出来る。

def add(x,y):
    ans = x + y
    return ans

n = add(3, 5)
print n    # 8

はー、インデントが強制だから中括弧とかは不要になるのか。

リスト、タプル、ディクショナリ

  • リスト
    • [ ] (角括弧)
    • いわゆる配列。
  • タプル
    • ( ) (括弧)
    • 変更できない配列。
  • ディクショナリ
    • { } (中括弧)
    • 連想配列。

Python入門 - リスト・タプル・辞書
【python】基礎を復習 (リスト, タプル, ディクショナリ)

Nullオブジェクトは None

# ↓正解 
A is None
A is not None

# ↓不正解、遅いらしい
A == None

PythonではNoneの比較は==ではなくisを使う
Pythonでヌルオブジェクトの比較

elif

Pythonではelse ifをelifと書くのかw

日本語エンコード

日本語コメントアウトでもASCII以外のキャラクタがはいっていると怒られるので、ファイルの頭にエンコーディングの指定をしてやると日本語でも言う事聞いてくれる。

# coding=utf-8

Pythonと日本語

in演算子

指定の値が要素に含まれているかどうかを調べる。

list = ["A", "B", "C"]

print "B" in list        # True
print "D" in list        # False
print "B" not in list    # False
print "D" not in list    # True

要素の確認(in演算子, indexメソッド, countメソッド)

lambda

ラムダ式。Pythonの無名関数。

def func(a, b):
    return a + b

print func(1, 2)    # 3

上記をlambdaを使うと、

print (lambda a, b: a + b)(1, 2)    # 3

で、変数に格納することもできると。へー。

f = (lambda a, b: a + b)
print f(1, 2)    # 3

lambda式はすごく面白い

reduce 関数

複数の要素を1つにまとめたいときに使う。
具体的には,配列の先頭から 2 つの要素を取り出して処理を行い,次はその結果とその次の要素に処理を行う,ということを繰り返す。

print reduce(lambda x, y: x + y, range(1, 5))    # 10

Python3だとimportが必要とのこと。

Python 2 と 3 での高階関数の使い方の比較

test.pyはメッ

ちょっと試すのに完全にこれやってたw
testていう標準ライブラリがあるから。
Pythonでtest.pyを作るな!

[ctrl] + [c] をキャッチする

RapPiでPythonプログラム終了時にGPIOからのLED光りっぱなしとかが気になったので[ctrl] + [c]をキャッチして終了処理を書いた。

try:
    while True:
        # ここに通常処理
except KeyboardInterrupt:
    print("interrupted!")
    # ここに終了処理

Python で Ctrl-C をキャッチする

pass 文

何もしない。中身の無い関数やクラスを作成する際に使用されます。
そんなんあんのか。

def func()
    pass

Python入門 - 制御構文

サーバを建てる

「Python、楽しい!」ってなって、何できるかなーと調べてたけどサーバが簡単に立ち上がるのすぎょい。

$ python -m SimpleHTTPServer

Pythonならたった一行でWebサーバを建てられる
PythonでWebアプリをつくる(ApacheもWebフレームワークもなしで)

for 文

こんな書き方おらはじめてだ。

for 整数 in オブジェクト
    処理

オブジェクトに配列をいれれば順番に実行してくれる。

list = [1,2,3]
for num in list:
    print(num) # 1 2 3

オブジェクトにrange関数を指定すればそれに従って実行。

for num in range(5):
    print(num) # 0 1 2 3 4

0から始まって5回実行してくれる、って意味っすね。

range関数の引数の数によって挙動も変わる。

  • range(5)
    • 出力:0 1 2 3 4
    • 0からインクリメントしながら5回実行
  • range(5, 10)
    • 出力:5 6 7 8 9
    • 5からインクリメントしながら10未満まで実行
  • range(0, 10, 3)
    • 出力:0 3 6 9
    • 0から10未満まで、3ずつ増加しながら実行

python for文を初心者向けに解説!for文基礎はこれで完璧

if 文

こう書くのね。
Pythonは基本的に文中の括弧を極力書かないようにしてんのか。

if 条件式1:
    処理
elif 条件式2:
    処理
else:
    処理

複数の条件分岐(if...elif...else)

ブロックコメントアウト

基本的に # をつけた行コメントしかできないらしい。
クォーテーションでそのかわりとなる役割が可能。
それもシングルとダブルでネストが可能。

"""
print "hello"
'''
print "heyhey"
'''
"""

コメントアウト

オブジェクトの識別値

Pythonの全てのオブジェクトには、それぞれ固有の「識別値(ID)」を持っている。
で、immutableなオブジェクトとmutableなオブジェクトがある。
immutableなオブジェクトはオブジェクトの値が変更されたときに同時にIDも変更になるオブジェクト。
普通の整数とか文字列とか?

mutableなオブジェクトは、反対にIDが固定のオブジェクト。Listとか。

なので以下の状態だとPythonはIDに変化がないから指すオブジェクトも同一のものという認識になるらしい。
ほー、覚えておこ。

a = [1,2,3,4,5]
# aというリストの中身をコピーしたbというリストを作った(つもり)
b = a

# 後からa[2]の値を変更した(つもり)
a[2] = 5
print(a) # [1, 2, 5, 4, 5]
print(b) # [1, 2, 5, 4, 5]

Python のリストの扱いで注意すること

多次元配列

Pythonでは多次元配列を実現しようとするとき、
- 多重リスト
- NumPy 配列
の2つがあるらしい。
NumPyが静的で高速なので、こっち使ってみよう。

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print a
# [[1 2 3]
#  [4 5 6]]

NumPy 配列の基礎

クラス

class Spam:
    val = 100
    def ham(self):
        self.egg('call method')
    def egg(self, msg):
        print("{0}".format(msg))
        print(("{0}".format(self.val))

spam = Spam()
spam.ham()

# --- output ---
# call method
# 100

なんじゃい、self

Pythonではメソッドは最低1つの引数を持ちます。この最初の引数は必ずselfという名前にする慣例があります。

なるほど。

Python基礎講座(13 クラス)

format関数

文字列への変数の埋め込みに使われる。

'任意の文字列{}任意の文字列'.format(変数)

引数で指定、もできる

apple = 50
orange = 100
total = apple + orange

print('りんご:{0}円 みかん:{1}円 合計:{2}円'.format(apple, orange, total))

# --- output ---
# りんご:50円 みかん:100円 合計:150円

【Python入門】format関数で文字列の書き方


関数の戻り値が複数の時

タプルでもらって、そのまま要素を呼び出せば値が使える。
あんまりこんな書き方したことないから新鮮だな。

def tasu(x):
    a = x + 1
    str = "data : "
    return (str, a)

(n, m) = tasu(1)
print n
print m

# --- output ---
# data :
# 2

関数で複数の返り値を返す方法


数値の末尾の"L"

RECVMSG           = 0x00000021L

どっかのサンプルコードを見てたら16進数のあとに"L"がついていてなんじゃこりゃとおもった。

これは「長整数」といって、整数と同じだが扱える桁数の限度がなくなる、とのこと。
つけずに桁数オーバーしても勝手に長進数に変換される。

16進数は先頭に"0x"、8進数は"0"をつけるとそう扱われる。
どちらもprintすると10進数で出力される。

数値リテラル


【ラズパイ】喋らす

OpenJTalkを入れてみた。
音声合成をする方法(Open JTalk)

漢字もいけた。
そこそこ自然な発話だけど、機械がしゃべる分にはSF感が足りないから使わないかも。


Python楽しい!!!!!

6
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
11