ダイナミックタイプはPython言語の柔軟性の根源です

4631 ワード

C、C++またはJAVAに触れたことがあるなら、Pythonがどうしてそんなに厳密ではないのか、変数を使用するときに変数のタイプを宣言していないと思うかもしれません.C言語:int a=3、Python:a=3元、Pythonはスクリプトで使用されるオブジェクトの正確なタイプを宣言したり、特定のタイプを気にしたりしません.これにより、非常に柔軟になります.変数aは整数型に割り当てられ、整数型に割り当てられ、文字列に割り当てられます.タイプは実行中に自動的に決定され、C、C++やJAVAなどの静的コンパイル型言語と同様に、事前に宣言する必要があります.したがって、Pythonのような言語は動的タイプ言語とも呼ばれる.
動的タイプ言語とは,変数やパラメータを定義する際に,そのデータ型int,stringなどを宣言する必要がない.JavaScript、Ruby、Pythonなどはダイナミックタイプ言語です.
スタティックタイプ言語(Statically Type Language)とは逆に、そのタイプは、コンパイルフェーズなどの実行前に判断されています.C#、javaは静的タイプ言語です.
混同しないでください:
動的/静的タイプ言語は、動的/静的言語とは異なります.
動的タイプ言語、変数の宣言:
//Python
x = 1
y = 2
sum = x + y

静的タイプ言語、宣言変数:
//JAVA
int x = 1;
int y = 2;
int sum = x + y;

Pythonの文の終端:
Pythonでは、1つの物理行に論理行が1つしかない場合、セミコロン'を使用する必要はありません.終端として、例えば、x=1 y=2物理行が2つ以上の論理行を有する場合、x=1;y = 2 ;
Pythonでは、変数のデータ型は代入文によって決定されます.
x = '1'   #   
x = 5     #  
x = True  #   

Pythonの変数Pythonの変数は名前にすぎず、その役割はオブジェクトを参照し、任意のタイプのオブジェクトを参照し、タイプ情報や制約を関連付けない.
Pythonのオブジェクトは割り当てられたメモリであり,定義された値を表すのに十分な空間がある.オブジェクトタイプはInteger、Boolean、Long integer、Floating point real number、Complex number、String、List、Tuple、Dictionaryなどがあり、いずれも2つの標準的なヘッダ情報がある:1つのタイプ識別子はこのオブジェクトのタイプを識別し、1つの参照カウンタは、このオブジェクトを回収できるかどうかを決定するために使用される.
Pythonの付与について考えてみてください.
a = 12
b = 12

すみません、この2つの付与文には全部で12のメモリがいくつ割り当てられていますか?答え:一つです.付与のプロセスはどのようなものですか?1、12 2を表すオブジェクトを作成し、変数a 3を作成し、変数aをオブジェクト12に接続し、すなわちaに12を参照させる.4、変数b 5を作成し、変数bをオブジェクト12にも接続し、すなわちbにも12を参照させる.したがって、変数aおよびbは、同じオブジェクト12、すなわち同じメモリ領域を参照しており、これはPythonでは共有参照と呼ばれ、複数の変数名が同じオブジェクトを参照している.
変数aと変数bは、文字列、リスト、メタグループ、またはセットを参照している場合、同じオブジェクトを指していますか?
異なる変数が同じオブジェクトを指しているとどのように判断しますか?これは、id(アイデンティティID)、type(データ型)、value(値)の3つの基本要素について説明します.isと==はオブジェクトオペレータです.isは同一演算子と呼ばれ、異なるオブジェクトのidが同じかどうか、すなわち異なる変数が同じメモリ空間を指しているかどうかを判断します.例:
a = "woshizifuchuan"
b = "woshizifuchuan"
print(a is b)

出力:True or False?id関数からid値を算出して、id(object)がオブジェクトの「身分証明書番号」を返すと判断することもできます.
id(a)
140589661955648
id(b)
140589661955648

==異なるオブジェクトを比較するために使用されるvalue(値)が同じかどうかです.
a = ('a','bc','g')
b = ('a','bc','g')
print(a==b)

出力:True
静的タイプ言語では、変数タイプの判断はコンパイル段階で行われます.
//JAVA
int x = 1;
int y = 2;
String sum = x + y;

C:\Users\*****\Desktop>javac sum.java sum.JAva:7:エラー:互換性のないタイプ:intはString String sum=x+yに変換できません.
Pythonでは、コードが正当かどうかは実行時に判断されます(実行時のタイプ判断に注意):
# -*- coding: UTF-8 -*-     
def add(x, y):       #         x、y     
    sum = x + y
    return "\'{0}+{1}\'     :{2}".format(x,y,sum)
    #  format          ,               
sum = add(3, 5)      #    add(x, y) ,      x、y     
print sum
----------------------------------------------------------
C:\Users\*****\Desktop>python sum.py
'3+5'     :8

中国語を出力する場合は、python 3で、ファイルの一番上に#--coding:UTF-8--という注釈を付ける必要があります.xバージョンでは、pyファイルをデフォルトのANSIではなくUTF-8符号化フォーマットとして保存する必要があります.
python 3.xバージョンではprintは文ではなく内蔵関数になっているため、print sumをprint(sum)に置き換える必要があります.
関数のパラメータは、値を割り当てるときにデータ型を決定します.
sum = add(3, 5)             #    
sum = add('3', '5')         #     (string)
sum = add(3, 5j)            #  ,  
sum = add(3.1, 5.3)         #     
sum = add(3.1, 5L)          #   ,        :python 3            int,      ,   python2    Long。
sum = add(True, True)       #     
sum = add(True, 3)          #   ,  
sum = add(-True, 3.5)       #   ,   
sum = add('3', 5)           #x    (string),y         :          ,     。

実行中、コードが適切かどうかを確認します.
C:\Users\******\Desktop>python sum.py
sum = add(3, 5)-------'3+5'     :8
sum = add('3', '5')---'3+5'     :35      #  "+"      
sum = add('3', '5')---'3+5j'     :(3+5j)
sum = add(3.1, 5.3)---'3.1+5.3'     :8.4
sum = add(3.1, 5L)----'3.1+5'     :8.1
sum = add(True, True)-'True+True'     :2  #True   1,False 0
sum = add(True, 3)----'True+3'     :4
sum = add(-True, 3.5)-'-1+3.5'     :2.5
sum = add('3', 5)-----Traceback (most recent call last):
  File "sum.py", line 21, in 
    sum = add('3', 5)
  File "sum.py", line 3, in add
    sum = x + y
TypeError: cannot concatenate 'str' and 'int' objects

なお、実行中、x賦値は'3'であり、指向するオブジェクトは文字列タイプ('str')、y賦値は5であり、指向するオブジェクトは整数('int')であり、加算も接合もできない.