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
(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
(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 寫乙個小專案,讓別人或者半年後的自己讀讀看就知道原因了。小學生 英語教育落後地區 用拼音程式設計玩玩是可以的,但是我更推薦直接用漢...