你認為什麼程式語言的語法比較怪異?

時間 2021-05-30 19:58:25

1樓:level-128

python

python中的else的意思是與其他程式語言和英語相反的(除了if語句中)

forx

inrange(1

,6):print(x

)ifx==

4:break

else

:print(5

)正常人都會認為輸出是1-5,因為else會在上面for迴圈不滿足(被break),也就是英文中的「else」,時執行

結果.... 是反過來的,else語句塊只有在迴圈沒有被打斷下才會執行.....,所以輸出是1-4

還有try語句下的else ,應該是出錯,但沒有被except捕獲才會執行,但是已經有 except:或者except Exception:了,就沒有必要了,導致else變成現在的意思。

2. python是乙個套著OOP和命令式程式語言的殼的半函式式程式語言

舉幾個小例子

在python中,對乙個變數賦值有三種辦法:

x = 1

globals()["x"] = 1

(x := 1)

第乙個是賦值語句,第二個是訪問全域性變數,然後給全域性變數這個dict中新增key為"x",value為1的成員(到這裡就很怪異了),第三個的:=是乙個函式的語法糖, (x := 1)是乙個有返回值的函式,其作用是給x賦值為1,並返回被賦予的值。

這在主打FP的語言中很常見。

你可以把:=理解成def assign(name: str, value: any) -> any: ... 這個assign函式

並且:3+(

4ifTrue

else5)

這種三元運算子也有返回值,

還有Python特色的裝飾器,看看Python怎麼實現C的struct:

@dataclass

class

my_struct

:number

:int

word

:str

something

:any

my_class

=my_struct(1

,"hello"

,True

)print

(my_class

.number

,my_class

.word

,my_class

.something

)@dataclass是乙個函式,接受乙個函式為輸入,返回值是乙個函式。 在建立class my_struct時,@dataclass會接受my_struct這個類為dataclass函式的引數,並在執行時給my_struct新增建構函式__init__, 之後此函式的返回值是乙個新的類 ,你在建立my_struct的例項時實際上是在建立dataclass(my_struct)(1, "hello", True)

C:struct

my_struct

看起來很像,但是嗎....

還有:my_class

=my_struct(1

,"hello"

,lambdax,

y:x+

y)meow

=my_struct(1

,"meow"

,my_class

)print

(meow

.something

.something(2

,3))# 5

函式和變數和例項都是同等的,不需要new來新建例項, 都是可以和變數一樣被賦值,被呼叫的(上面的例子)。

還有以下怪異到不屬於命令式語言的特性:

for迴圈強制in後的元素進行惰性求值,即使後面的元素不需要這麼做,也會將後者視為可迭代物件並賦給迴圈變數(也就是說這個for迴圈並不是其他語言那樣)(看我的回答https://www.

)生成器的實現

錯誤本質上是乙個類,raise乙個錯誤是建立這個錯誤類的例項,也就是說你可以給這個例項打猴子補丁(執行時改變例項的物件)和建立新的繼承關係,python是通過這種特性來建立自定義錯誤的。

執行時儲存變數的名稱(也就是說你可以獲取程式到現在為止變數值為xx的變數名稱,以及互換乙個變數的值與名稱),所以Python不存在」變數「這一概念,只有」一段字串與乙個例項的對應關係「這個概念,任何變數(和函式,類)都是以這種方式進行儲存的。

2樓:鄭斌

計算機專業,那時候主要學習c++,畢業2年還是c++為主要開發語言,python,shell做一些指令碼語言學習。

今年轉了go開發區塊鏈,發現變數型別宣告放在後面。

感覺程式語言的語法沒有怪異,只是不習慣一說吧。。。。

你對你認為比較漂亮的程式語言的語法有什麼理解?

嚴格布局 基於分號和花括號 和輕量語法 基於對齊 並存,同時符合自然語言的語法 參考 Haskell 2010 Language Report 有關詞法和布局的內容 參考 F 的輕量語法 Curried 與 unCurried 的區分 混綴表示式與寬鬆的換行制度 參考 agda stdlib.Rel...

你認為最簡單的程式語言是哪種?

破曉之時 LabVIEW,託圖形就好 彙編,指令都記下來就能寫 Prolog,定義好規則之後查詢語句就會很直觀SQL OWL,簡單的對資料的查詢 brainf k,只有8個字元,模型很直觀,記ASCII表就完事了 Belleve 我認為是 Jot,這個語言簡單到已經不能說是程式語言了,它更像是對 S...

為什麼沒有或流行的拼音程式語言?

逸小海 不知道那些做遊戲的怎麼命名那些變數的 比如青虹劍是要叫QingHongJian 還是QingHongSword 還是GreenRedSword Lex Teng 寫乙個小專案,讓別人或者半年後的自己讀讀看就知道原因了。小學生 英語教育落後地區 用拼音程式設計玩玩是可以的,但是我更推薦直接用漢...