Python入門ノート(3):基礎(下)

14636 ワード

一、数字
「Pythonコアプログラミング」を見たとき、なぜPythonの数字をベースにしていないのか疑問に思ったのですが、著者はまずPythonオブジェクトを通じて、数字に深く入り込むと、より理解しやすいかもしれません.ここで一つの観点は「Pythonのすべての対象」の原則であり、前節の学習変数の付与を通じて、この原則を深く体現することができ、具体的には下節の学習入門ノートを参照してください.
数字はPythonではあまり使われていないので、jsの数字のタイプを学ぶように、基礎編の中に入れたほうがいいと思います.これは次の節の対象に敷く役割があると思います.
このセクションでは、Pythonの数値タイプ、操作、数値に関する組み込み関数について学習します.
1、数値タイプ
前節では、Python変数はタイプを定義する必要はありません.これは、ダイナミックタイプの言語であり、メモリ内で割り当てられた値に基づいてダイナミックにタイプを決定するためです.pythonで変数を分類する場合は、可変タイプと可変タイプに分けられます.
ここでは、可変タイプ(mutable)と可変タイプ(immutable)に関する知識を整理します.
(私たちは次の節を勉強してこそ、これを深く理解することができるかもしれません.もしCを勉強したことがあれば、Cポインタの芸術のようです.C#を勉強すれば、C#の値のタイプと引用のタイプの性質のようです.jsを勉強すれば、その性質は基本的にPythonと同じです.総じて言えば、すべてのプログラミング言語は基礎の核心をめぐっていますが、それぞれが異なるだけで、私たちは融通をマスターしなければなりません.ああ、一反三...でも难しいですよ.
ここでは、次の文章をお勧めします.
「600種類以上のプログラミング言語を学ぶ方法」 -----------------------------------------------------------------------------------
可変タイプ(immutable):メモリ内の可変コンテンツ(value)が変更可能かどうかであり、可変であれば、オブジェクト自体を操作する際に、メモリの別の場所でもう一つの領域を申請しなければならない(古い領域は可変ではないため)、古い領域は破棄される(他のrefがあれば、ref数字は1減少し、unixのhard-linkのように).
可変タイプ(mutable):オブジェクトを操作する場合、メモリを他の場所で申請する必要はありません.このオブジェクトの後ろに連続して申請するだけです(+/-)つまり、addressは変わらないが、領域が長くなったり短くなったりします.
可変タイプはstring、interger、tuple:
 1 >>> var1 = 1
 2 >>> var2 = var1
 3 >>> var1,var2
 4 (1, 1)
 5 >>> id(var1),id(var2) #        ,id  
 6 (21200672, 21200672)
 7 >>> var1 += 1
 8 >>> var1,var2
 9 (2, 1)
10 >>> id(var1),id(var2)
# var1,var2 , var1+1 , ,id(var1) ,id(var2) , ref -1 11 (21200660, 21200672) 12 >>>

可変タイプ:list,dict
 1 >>> lst1 = [1,2,3]
 2 >>> lst2 = lst1
 3 >>> lst1,lst2
 4 ([1, 2, 3], [1, 2, 3])
 5 >>> id(lst1),id(lst2)
 6 (28497360, 28497360)
 7 >>> lst1.append(4)#     ,append ,address     
 8 >>> lst1,lst2
 9 ([1, 2, 3, 4], [1, 2, 3, 4])
10 >>> id(lst1),id(lst2)#lst1,lst2        
11 (28497360, 28497360)
12 >>>
13                ,dict key       ,              。
14 eg:
15 >>> def dis(arg=[]):
16 ...     arg.append('1')
17 ...     print arg
18 ...
19 >>> dis()
20 ['1']
21 >>> dis()
22 ['1', '1']
23 >>>id(dis())
24 ['1', '1', '1']
25 505246615
26 >>>id(dis())
27 ['1','1','1','1']
28 505246615

参照先:http://blog.chinaunix.net/uid-26249349-id-3080279.html
数値は可変タイプ、つまり数値の値を変更すると新しいオブジェクトが生成されます.もちろん、これは考慮する必要はありません.
python数値タイプは、整数型、長整数型、ブール型、二重精度浮動小数点型、十進法浮動小数点型、複素数に分けられます
(1)、整形:
例:0101、8、-3、0 X 80、-0 X 78
(2)、ブール型
True、False
(3)、ロングフォーム
整型の後ろにL(またはl)を加え、現在整型と長整型が徐々に統一されている.repr()関数を呼び出すとLが表示され、str()関数を呼び出すとLが表示されません.
>>> aLong=11111111111111111111
>>> aLong  (     ,          ,          repr()  )    
11111111111111111111L
>>> print aLong (     ,         print    str()  )    
11111111111111111111
>>> 

(4)、二重精度浮動小数点型
Cのdoubleに似ています.実際の精度はPythonインタプリタのコンパイラに依存する.
(5)、複数
 1 >>> aComplex=2.1+3j
 2 >>> aComplex
 3 (2.1000000000000001+3j)
 4 >>> aComplex.real
 5 2.1000000000000001
 6 >>> aComplex.imag
 7 3.0
 8 >>> aComplex.conjugate()
 9 (2.1000000000000001-3j)
10 >>> 

詳細はpython core programming
2、オペレータ
それぞれ:+、-、*、/、%、**、//(床を除く)
興味深いことに、pythonの除算です.
jsでは、次のコードが実装されます.
1 <script type="text/javascript">
2 var a=1,b=2;
3 var c=0.1,d=0.2;
4 var result1=a/b;
5 var result2=c/d;
6 alert(result1);#0.5    
7 alert(result2);#0.5
8 </script>

Pythonで実装すると、次のようになります.
>>>1/2
0
>>>0.1/0.2
0.5

ちょっとおかしいですね.Pythonはこのように処理しています.
従来の除法:整型除法であれば、従来の除法は小数点部分を捨て、整型(床除)を返します.オペランドの1つが浮動小数点型の場合、本格的な除算が実行されます.
真の除法:真の商に戻ると、将来のPythonバージョンでは統一基準になりますが、今はfrom_を通じてfuture__ import divisionは実現できます.
>>> from __future__ import division
>>> 1/2
0.5
>>> 1.0/2.0
0.5

床除:Python 2.2から、新しいオペレータ//は、床除と呼ばれます.つまり、操作数がどんなタイプであっても、小数部を捨てて整数を返します.
>>> 1//2
0
>>> 1.0//2.0
0.0
>>> -1//2
-1

他のオペレータは、「Pythonコアプログラミング」と公式サイトのドキュメントで見ることができます.
3、数字に関する組み込み関数
より多くの組み込み関数については、後で詳しく説明しますが、今日は数字の組み込み関数について勉強します.次のものがあります.
(1)、標準組み込み関数:
cmp()、str()、type()はどのタイプでも使用できます
>>> cmp(1,2) #       
-1
>>> cmp(2,1)
1
>>> cmp(2,2)
0
>>> str(0xFF) #      
'255'
>>> type(0xFF) #      
<type 'int'>
>>> type('str')
<type 'str'>

(2)、変換工場関数:
int()、long()、float()、bool()、complex()は、いずれも数値に関連する関数に変換されます.次のようになります.
>>> '111'
'111'
>>> int('222')
222
>>> long('222')
222L
>>> float('222')
222.0
>>> bool(1)
True
>>> complex(2)
(2+0j)
>>> bool(True)
True
>>> bool(454)
True
>>> bool(0)
False

(3)、機能関数
abs()は、指定されたパラメータの絶対値を返します.
>>> abs(-3)
3

Coerce()データ型は、2つのパラメータを変換します.
>>> coerce(1,2)
(1, 2)
>>> coerce(1,-2)
(1, -2)
>>> coerce(1,123L)
(1L, 123L)
>>> coerce(1.3,123L)
(1.3, 123.0)
>>> coerce(1j,123L)
(1j, (123+0j))

divmod()は、余剰を取ることによって、商と余剰の元祖に戻ります.
>>> divmod(10,2)
(5, 0)
>>> divmod(10,3)
(3, 1)

pow()と**は指数演算を行うことができます.
>>> 5**2
25
>>> pow(5,2)
25

round()四捨五入:
>>> round(3)
3.0
>>> round(3.45)
3.0
>>> round(3.999999,1)
4.0

詳細な組み込み関数はPythonの公式サイトのドキュメントを参照してください.