# 応用プログラミング(python)1
**はじめ**
言語は、人が自分たちのために作ってくれたもの.
```
<font color="Red">PS1="$ "</font> //ターミナルの名前省略
<font color="Red">rc1</font> //Release Candidate
```
****
**起動・終了**
```
exit()//即終了
quit()
control+D//終了コマンド
$python -v //
$python -c ''//pythonの''の中に書かれているのを実行する
a=3//代入ではない.束縛.
print("{0} + {1} = {2}".format(a, b, c))//
python -c 'import sys; help(sys); quit()//システム関数を見てきて。
```
****
**数値・文字列**
・数値
整数と実数(浮動小数点数)そして複素数(ここでは省略)しかありません。整数のビット長(short/int/long/多倍長など)を気にする必要はありませんし、浮動小数点数の単精度と倍精度(float/double)も気にかけなくていいです。かなり率直に数値を表現でき、まるでSmalltalkのようです。
・文字列
任意の文字の連なり(列)をクォーテーション『シングルクォート「'」か、もしくは、ダブルクォート「"」』で囲うと文字列を表現することになります。通常はシングルクォートで囲うのでいいと思いますが、囲みたい文字列の中にシングルクォートが含まれるときはダブルクォートで囲い、反対に、囲みたい文字列の中にダブルクォートが含まれるときはシングルクォートで囲むのが得策です。
改行やタブなど、クォーテーション自体やバックスラッシュ自体などを、囲まれる文字列の中に含めたい場合には、エスケープシーケンス(バックスラッシュに続くもの)を用います。たとえば、改行は「\n」、タブは「\t」、シングルクォート自体は「\'」、ダブルクォート自体は「\"」、バックスラッシュ自体は「\\」というように。
```
float//その時代の浮動小数点の最大。
```
""でも''でもどっちでもいい。
<font color="Red">pythonには、1文字という文字列はあるが、1文字はない。</font>
'abc\n\t123\n\'xyz\'' // \でエスケープ
3つ重ねのクォーテーション
パイソニスト
パイソニア
[i:j] // i から(以上) j 未満。スライシングという。
A==B(~=)
AisB(is not) //javaでいう == 。
メモリを節約するために、違う関数でも同じ文字列は同じになっている。
nlコマンド
****
**リスト・タプル・セット・ディクショナリ**
すでに数値・文字列のところで変更可能(mutable:ミュータブル)と変更不能(immutable:イミュータブル)なオブジェクトの紹介をしました。イミディエイト(immediate:直値:即値)である数値、そして、リテラル(literal:定数)として記述される場合が多い文字列、両方ともイミュータブルなオブジェクトでした。
上述のリストとタプル、似ているのに…、なんでふたつあるの…、丸括弧と角括弧がちがうだけなのに…、などの疑問を持ったのではないでしょうか。リスト構造と配列構造のちがいがあり、メモリマップ(メモリ上のパッキング構成)が異なるのだろうと想像できると思います。確かにリストに比べてタプルのほうがアクセスのスピードが速い。
実は、リストはミュータブルなオブジェクト、要素を変更(&追加&削除)でき、リストとしての値を変更可能です。一方、タプルはイミュータブルなオブジェクト、要素を変更(&追加&削除)できず、タプルとしての値が不変(変更不能)です。確かめてみましょう。
pythonのリストは型宣言しなくてもなんでも入る。
listにすることをpackという。
<font color="Red">listは変更可能だが、tupleは変更できない</font>
関数に引数を渡すのもtupleでする。
変更したいものはlist
変更しなくてもいいものはtuple
```
list
list=[]
```
```
tuple
dictionary = {'name': 'AOKI Atsushi'}
```
左にkey、右にvalueを入れる。javaでいうmapの役割をする。
***
**プログラム構造分**
拡張BNF(EBNF:Extended BNF:Extended Backus-Naur Form:言語を定義する言語、すなわち、メタ言語;詳しくは3年次・秋学期「プログラミング言語」の授業を履修してください)の表記を用いて、Pythonプログラムの構造(structure)を作る文(statement)を列挙(enumerate)します。
```
シェバン
#!/usr/bin/env python //重要
```
```
マジックコメント
# -*- coding: utf-8 -*-
```
```
コロンが出たら字下げする。
字下げが終わったわ処理は終了する。
スヘースで空けるのとtabで開けるのとでは全く違うものが出来上がる。
```
***
**変数と組み込み型**
変数のモデルには「入れ物モデル」と「貼り紙モデル」があります。
Pythonにおける変数は「貼り紙モデル」です。「入れ物モデル」は一切ありません。通常「変数に代入する」と言いますが、すべては束縛であり、すなわち、オブジェクトへの参照(ポインタ:アドレス)を格納します。何でも(いかなるオブジェクトでも)束縛が可能であり、そのため、型宣言が不要です。あえて(誤解を恐れずに)述べると、オブジェクトへのポインタという型が一種類だけ存在するのですが、いちいち唯一の型を宣言するほうが煩わしいわけです。
`代入は野蛮、束縛はえっち。`
スネークケース (Snake Case)
アルファベットかアンダーバーで始めて 単語を組み合わせたいときに アンダーバー『_』でつなぎ合わせる へびのごとく「地をはう」ように
- 基本ケース(basic case):
- UPPERCASE ... すべての文字を大文字にする
- lowercase ... すべての文字を小文字にする
- スネークケース(snake case):
- UPPER_CASE_WITH_UNDERSCORES ... すべての文字を大文字にして単語の区切りをアンダースコアにする(UPPER_SNAKE_CASE)
- lower_case_with_underscores ... すべての文字を小文字にして単語の区切りをアンダースコアにする(lower_snake_case)
- キャメルケース(camel case): UpperCamelCase ... 組み合わせる単語の最初の文字を大文字にする
- lowerCamelCase ... 先頭文字を小文字で始めて組み合わせる単語の最初の文字を大文字にする
- アンダースコアの用法(underscore usage):
- leading ... 先頭をアンダースコアにする(underscore leading)
- trailing_ ... 末尾をアンダースコアにする(trailing underscore)
- leading_and_trailing_ ... 先頭と末尾をアンダースコアにする(underscore leading and trailing underscore)
assert関数-この引数に書かれていることは
***
**条件分岐・繰り返し・制御フロー**
- if ...(条件分岐:Conditional Branch)

- if ... else ...(条件分岐:Conditional Branch)

- if ... elif ... else ...(条件分岐:Conditional Branch)

- while ...(繰り返し:Loop)

- for ... in ...(繰り返し:Loop)

- call and return(制御フロー:Flow Control)
- try ... finally ...(制御フロー:Flow Control)

- try ... except ... finally ...(制御フロー:Flow Control)

- with ... as ...(制御フロー:Flow Control)

処理Aにエラーが起きてもバイバイするねと言ってくれる。
ファイルを閉じないといけない
「with ... as ...」がきたらファイルを開いているのかと疑うよろし。
for(;;)//for~のために
***
**組み込み関数**
関数名は自由好きなものに変えることができる。
ウェブスクレイピング(Web scraping:Webページから必要な情報を抽出すること)によって得ています。ここで、そのプログラムを示してもいいのですが、Python処理系に対して「pip(ピップ)」というコマンドを用いて、新たなモジュール「requests」とモジュール「bs4」を導入しています。ですから「モジュールとパッケージ(Module and Package)」の章に詳細を譲りたいと思います。
***
**関数:定義と利用**
```
>>> print(result.strftime("%Y/%m/%d"))
2019/05/18
>>> print("{0:%Y年%m月%d日}".format(result))
2019年05月18日
>>>
```
実のところ、一括束縛(一括代入)はタプル(tuple:組み込み型)のパックとアンパックの機能を利用しています。以下がその証明になります。
```
>>> a_tuple = 10, 20, 30
>>> a_tuple
(10, 20, 30)
>>> type(a_tuple)
<type 'tuple'>
>>> a, b, c = a_tuple
>>> a
10
>>> b
20
>>> c
30
>>>
```
リスト(list:組み込み型)のパックとアンパックの機能を用いることもできます。その場合にはreturn文のところにブラケット括弧が必要になります。関数を呼び出して値を受け取るところではブラケット括弧があってもなくてもいいです。
```
>>> script = """
def another_function():
return [10, 20, 30]
"""
>>> exec(script)
>>> r, s, t = another_function()
>>> r
10
>>> s
20
>>> t
30
>>> [d, e, f] = another_function()
>>> d
10
>>> e
20
>>> f
30
>>> result = another_function()
>>> result
[10, 20, 30]
>>> type(result)
<type 'list'>
>>>
```
- Point
関数定義における引数のデフォルト値
引数にデフォルト値があり、実数値なしでできる。
引数は固定では無い。
関数呼び出しの時に省略できる。
引数の順番は仮引数があれば、入れ替えても大丈夫。
```
def open_web_browser(*tuple_of_arguments, **dictionary_of_arguments):
```
引数を辞書渡しできる。
さしす
****
hghjvk