[oeasy]python0070_動(dòng)態(tài)類型_靜態(tài)類型_編譯_運(yùn)行_匈牙利命名法

動(dòng)態(tài)類型_靜態(tài)類型
回憶上次內(nèi)容
上次了解了 幫助文檔的 生成
開頭的三引號(hào)注釋 可以生成 幫助文檔
文檔 可以寫成網(wǎng)頁
python3 本身
也有 在線的幫助手冊(cè)
目前的程序
提高了 可讀性

還有
什么
方法可以讓程序
更
可讀么???可以 根據(jù) 變量名
知道 變量類型 嗎?
動(dòng)態(tài)類型 - dynamic type
編寫一個(gè)test.py

運(yùn)行結(jié)果

age變量 的類型
從 整型數(shù)字
轉(zhuǎn)變?yōu)?字符串
同一變量名age 指向的類型
可以從整型數(shù)字
變
動(dòng)
到 字符串就是
動(dòng)
態(tài)類型python 是 一門
動(dòng)態(tài)
類型語言那有沒有 靜態(tài)類型呢?!
靜態(tài)類型 - static type
編輯 test.c

:w|!gcc %
保存并且
用外部命令gcc 編譯當(dāng)前文件

編譯失敗
test.c中聲明了
age 是 整型變量
不能 再將
字符類型’1’
賦給變量age
變量類型一旦被聲明
就不能動(dòng)了
這就是
靜
態(tài)類型c 是 一門
靜態(tài)
類型語言
靜態(tài)類型 vs 動(dòng)態(tài)類型
變量類型 是
編程語言的核心
靜態(tài)類型
類型錯(cuò)了
編譯都無法通過
數(shù)值 可以改變
類型 不再改變
提高效率
聲明類型 之后
需要在編程前思考清楚

動(dòng)態(tài)類型
類型 還可以改變
自主靈活
聲明之后
但 容易忘記 變量類型
導(dǎo)致 出錯(cuò)
動(dòng)態(tài)靜態(tài)PHPC/C++RubyJAVAPythonC#
動(dòng)態(tài)類型的優(yōu)勢(shì)
動(dòng)態(tài)類型語言里
不怎么 追求明確
因?yàn)?不需要編譯
能解釋得通 就行
解釋腳本語言多
類型 全靠 解釋器
自由 散漫
這種靈活性
容易和各種其他編程語言 配合
跑起來很容易
導(dǎo)致python
而且
這就是 python 被叫做
膠水語言(glue Language)的原因

各種語言
是怎么聲明變量的呢?
聲明演示
不同語言
聲明變量的語法不一樣
看看下面這些語言
語言聲明vbDim sum As Integerc/c++ java c#int sum;Pascal Delphisum:Integer;Javascriptvar sum;
可以看出
不知道到底用的是什么類型
靜態(tài)類型都很明確
動(dòng)態(tài)類型就很模糊
python 雖然是動(dòng)態(tài)語言
但是 類型這個(gè)事情
一定要明確
最好 在源代碼層面明確
否則
動(dòng)態(tài)語言 一時(shí)爽
后期重構(gòu) 火葬場(chǎng)
自省 introspection
雖然 python中 變量聲明
可以不在乎數(shù)據(jù)類型
可是
我們必須明確 數(shù)據(jù)類型
這個(gè)時(shí)候 就需要自省
introspection

introspectation
來自 *spec-
看
向內(nèi)的
intro
spectation
向內(nèi)看就是自省
怎么自省呢?
type函數(shù)
type就是類型

自省
知道自己是干嘛的
是什么類型額

知道了之后有什么用呢?
自省之后
自省之后
知道了自己的類型
不同類型 的變量
有不同的成員函數(shù) 和 運(yùn)算方式

可以在變量名上
刻意提醒 嗎?
刻意提醒
把類型作為前綴
integer
整型數(shù)字
string
字符串
明確寫在變量名上
從而提高可讀性
s
i
這樣變量
不但 有了 明確的語義
而且 明確了 數(shù)據(jù)類型
更容易 發(fā)現(xiàn)錯(cuò)誤

再明確一下這兩個(gè)前綴
前綴
s前綴
意思來自于string
代表變量是字符串型的
i前綴
意思來自于integer’
代表變量是整型的
這樣變量名
不但包含了變量含義
而且包含了變量的類型
甚至 可以包括 描述信息

這種 標(biāo)識(shí) 變量類型的方法
來自于哪里呢?
匈牙利命名法
匈牙利命名法
將類型 作為 變量名前綴

匈牙利命名法
命名慣例 本來是小駝峰的
現(xiàn)在根據(jù)python的命名慣例(name convention)
改成蛇形的(snake case)
這樣就可以
明確知道 變量的數(shù)據(jù)類型 了
可是 這個(gè)和匈牙利
有什么關(guān)系呢?
匈牙利命名法由來
查爾斯·西蒙尼
和 馮·諾依曼 一個(gè)地方
生于 匈牙利 布達(dá)佩斯
父親 是 布達(dá)佩斯大學(xué) 電氣工程教授
研發(fā)了 核粒子加速器

西蒙尼 從小 就在計(jì)算機(jī)實(shí)驗(yàn)室 做兼職
去了美國(guó)
離開了匈牙利
在丹麥寫ALGOL的編譯器
并賣給了政府
研發(fā)了 編譯器
17歲
后來
后來
在施樂公司
開發(fā)了第一個(gè)所見即所得文檔準(zhǔn)備程序
WYSIWYG /?w?ziw?ɡ/
Butler Lampson推動(dòng)下
原來
都是 用代碼模式 編輯富文本文檔
此后
可以 所見即所得

1981年
遇到 比爾蓋茨
從此 加盟微軟
主導(dǎo) word和excel的研發(fā)
并倡導(dǎo) 匈牙利命名法
匈牙利命名法
明確 變量類型
這對(duì)于 運(yùn)算特別重要
由于 變量類型不同
就會(huì)不同么???
運(yùn)算結(jié)果
運(yùn)算結(jié)果
類型不同
確實(shí) 運(yùn)算結(jié)果是不同的

input 函數(shù)
返回得到的 變量 是
什么
類型 呢?
input 函數(shù)返回值類型
input函數(shù) 返回值的類型
好像是
字符串
類型的

可是
需求要的是 整數(shù)類型 啊?
怎么辦?
轉(zhuǎn)化函數(shù)

使用 int 函數(shù)
就可以完成相應(yīng)的轉(zhuǎn)化

那么 這個(gè) int 函數(shù)
到底是 什么意思 來著?
查詢函數(shù)
help(int)
int函數(shù)
可以把 str 類型的變量
轉(zhuǎn)化為 int 型
要把這個(gè)int函數(shù)
整合到程序中
整合程序
修改如下
可以從變量名上
明確讀出 變量類型了
總結(jié)
這次 分辨了
靜態(tài)語言
動(dòng)態(tài)語言
python 屬于
對(duì)類型要求 沒有那么嚴(yán)格的 動(dòng)態(tài)語言
這對(duì)于 初學(xué)者很友好
無需明白變量 是 怎么存儲(chǔ)的
不過很多時(shí)候 也容易弄不清變量類型
直接 修改代碼
把縮進(jìn) 作為程序塊的分界一樣
明確起來
明確標(biāo)記在 變量名上
增強(qiáng) 程序的可讀性
把變量的類型
就像
想要 真正成為編程高手
知道 這數(shù)據(jù)類型
是
怎么
存儲(chǔ)的明確 變量的數(shù)據(jù)類型
不但 要
而且 要
想要 了解數(shù)據(jù)
是
怎么
存儲(chǔ)的從 哪種數(shù)據(jù)類型 開始呢 ???
下次再說!??
藍(lán)橋->https://www.lanqiao.cn/courses/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython