零零碎碎學(xué)了一段時(shí)間的語(yǔ)言,一直想對(duì)比總結(jié)記憶一下第步。
我接觸這幾門語(yǔ)言的先后順序鸳玩,Python2.7 > Node > Golang> Python3.6 > Java.如果不特意說(shuō)明的話,我所指的Python都是version 3.6.
變量聲明及賦值
Java | Node | Go | Python |
---|---|---|---|
int a=1; |
let a=1 |
a int = 1 |
a=1 |
- Java和Go類型聲明的位置不同
- let是es6的關(guān)鍵字托酸,表示聲明一個(gè)變量
- Node和Go聲明一個(gè)常量都用關(guān)鍵詞const褒颈,Java用final
- Python最牛,根本不用聲明變量励堡。
那么問(wèn)題來(lái)了谷丸,Python為什么不用聲明變量?
因?yàn)槁暶髯兞康谋举|(zhì)是在內(nèi)存堆里開(kāi)辟一塊內(nèi)存空間应结,并且在棧中的變量指向這個(gè)內(nèi)存空間刨疼。
而python,首先會(huì)創(chuàng)建一塊連續(xù)的內(nèi)存來(lái)保存1,然后把變量名a貼在上面,這個(gè)變量名沒(méi)有保存關(guān)于1的任何類型信息揩慕。
另外舉個(gè)例子游两,比如:b = a
對(duì)于b=a
,Java和Go都會(huì)在內(nèi)存中開(kāi)辟一塊新的空間漩绵,進(jìn)行了值拷貝贱案。而python只是把變量b貼上1上面,而不會(huì)開(kāi)辟新的內(nèi)存空間止吐。Node的話宝踪,我不了解。
hello world
Python
第一種:
print("hello world")
第二種:
if __name__ == "__main__":
print("hello world")
我的啟蒙語(yǔ)言就是Python碍扔,所以我很長(zhǎng)時(shí)間都不理解if __name__ == "__main__"
到底是啥意思瘩燥,后來(lái)接觸了Go、C不同、Java之后厉膀,我理解了,這句話就是程序的入口二拐,具體而言服鹅,就是當(dāng)py文件自身被調(diào)用時(shí),py文件的名字(___name____)是"___main____"百新。
Java
public class HelloWorld{
public static void main(String[] args){
System.out.println("hello world");
}
}
本來(lái)我是想先學(xué)Java的企软,可是看到Java顯示個(gè)“hello world”都這么麻煩,我罵了一聲“死變態(tài)”便轉(zhuǎn)身投入了Python的懷抱饭望≌躺冢可是當(dāng)我經(jīng)歷了上述的學(xué)習(xí)順序后,我逐漸覺(jué)得Java寫這么冗長(zhǎng)铅辞,不是沒(méi)道理的:
- 被public修飾的類需要獨(dú)享一個(gè)文件厌漂,文件名需和類名相同。
- static表明斟珊,main是類的方法苇倡,python中要用
@staticmethod
來(lái)表示類方法 - void表示該方法沒(méi)有返回值
- 在Java中函數(shù)不是一等公民,必須寫類倍宾。所以有人評(píng)價(jià)雏节,Java是最徹底的面向?qū)ο蟮恼Z(yǔ)言胜嗓。
Node
console.log("hello world")
打開(kāi)瀏覽器打開(kāi)“開(kāi)發(fā)者工具”高职,即可輸入該句。
Go
import "fmt"
func main(){
fmt.Println("hello world")
}
- Go的“fmt”包不是內(nèi)建的辞州,需要先引入怔锌。
- 函數(shù)在Go中是一等公民,并且都沒(méi)有,并且這點(diǎn)和C語(yǔ)言很像埃元。