search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

為什麼很多人都說 Python 簡單?

更新: 看見好些人還在回答說python不能做類型檢查,我看是裝睡叫不醒…

以下原文:

可是我在寫爬蟲,使用一些庫時發現python是動態語言,這導致在我有時我不知道返回的值和輸入的參數是什麼類型

題主你這個話不成立啊。

以及雖然我給最高票點了贊,但是我並不是贊同他對Python的理解。我贊同的是他對很多用Python的人的理解。

顯然,在座的各位可能對Python了解還是太少了,多看看我的相關答案和文章可能會有點幫助(逃

我們還是來看一下Python如何做類型檢查。

classstrict:@staticmethoddefargs(*typeargs:(*,),**typekwargs:dict):def_1(func):def_2(*args**kwargs):forarg_idx(argtypearg)inenumerate(zip(argstypeargs)):ifnotisinstance(argtypearg):raiseTypeError(f"Type of argnument {arg_idx} should {typearg}")forkeyinkwargs:ifnotisinstance(kwargs[key],typekwargs[key]):raiseTypeError(f"Type of argnument named {key} should {typekwargs[key]}")returnfunc(*args**kwargs)return_2return_1defret(*typerets):def_1(func):def_2(*args**kwargs):ret=func(*args**kwargs)iflen(typerets)1:forret_idx,(ret_ityperet)inenumerate(zip(rettyperets)):ifnotisinstance(ret_ityperet):raiseTypeError(f"Type of return value {ret_idx} should {typeret}")else:ifnotisinstance(rettyperets[0]):raiseTypeError(f"Type of return value should be {typerets[0]}")returnretreturn_2return_1

一些實例:

然後我們來回答問題,為什麼很多人都說Python簡單?

我就舉個例子來說咯。

初三的時候我就出於裝逼目的,找某個酷似歷史名人的大佬學了微積分,搞奧賽也用到了不少。

不就是求導微分積分咯,簡單。

然後...(這個地方應該用一個什麼樣的轉折才好呢?

其實微積分涉及到了很多東西,我當時半點都不知道,徒具形表。

就好比最基本的極限那一套,確界定理是怎麼證的,緻密性是什麼,極限是什麼(幾周前在某個大佬群里看到一堆人對極限這個概念胡說八道,couldn't be 監介 more。

我經常在某個高數輔導群里聽人問某個極限怎麼求怎麼求,洛必塔法則怎麼用。口口聲聲說高數簡單,能不能少一點這種問題?就沒人出來說一下無窮大和無窮小的階估計?泰勒級數又被你吃了?

但我轉念一想是這樣的,微積分學了又有什麼用呢?有個好成績,然後以後在吹逼時說兩句「微積分多簡單,我當年滿分」,或者在寫matlab和R搬磚的時候把結論往上一套,現成的,舒服,又為離開實驗室回寢室打遊戲爭取了幾分鐘啊。

好像世人皆然,這一切都很簡單。所以Python也很簡單。

但Python到底簡不簡單呢。

從語言的角度來說。

  • 一個為你提供了自由定製一切的可能性的語言環境,你可以就你的問題去做特定的編程,這樣你確實不用考慮很多東西。
  • 基本語法簡單。
  • 默認了很多符合常理的操作,比如字元串的+, *。
  • 默認的數據結構少。
  • 變數檢查是trait檢查,只要擁有相應的特性,就可以放在合適的地方,而不必在意類型。

是挺簡單呢,什麼都不限制你(除開GIL),這不就是廣大的、有一丁點C基礎的入門者想要的、好讀而且自己寫起來不容易犯錯的C語言么?

我想說一下我理解中的Python是什麼:

放一個代碼,其實可以悟一下。

def_gettype(self*protos):def_type(x):returnx._class__type.mro=[self]+list(protos)_type.mro.reversereturn_typedeffuncwrapper(selfobj):def_f(*args**kwargs):returnobj(self*args**kwargs)return_fdef_class(*protos**_ignored):def_make_class(cls):defclass_closure(*args**kwargs):definst_closure:passforkeyinclass_closure.__dict__:obj=class_closure.__dict__[key]ifcallable(obj)andnothasattr(obj'mro'):setattr(inst_closurekeyfuncwrapper(inst_closureobj))else:setattr(inst_closurekeyobj)inst_closure._init_(*args**kwargs)inst_closure._class_=class_closurereturninst_closureclass_closure.__name__=cls.__name__class_closure._class_=_gettype(class_closure*protos)forprotoinprotos:forkeyinproto.__dict__:ifkey=='_class_':continueclass_closure.__dict__[key]=proto.__dict__[key]local_objs=clsforkeyinlocal_objs:ifkey=='_class_':continueclass_closure.__dict__[key]=local_objs[key]returnclass_closurereturn_make_classdef_isinstance(xA):returnAinx._class_._class_.mro

我應該能用這個證明我對Python是相當了解的。此所謂Python的自由。

簡單不?



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦