我為什么建議前端將Python 作為第二語言?


前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。

作者: 前端勸退師

PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

1. Python和ES6語法差別

基本類型

在這里插入圖片描述

值得注意的是,盡管兩者都是動態類型,但python連接時並不會自動轉換類型。

1 // JavaScript
2 let coerced = 1;
3 let concatenated = coerced + 'string';

 

1 # Python
2 not_coerced = 1
3 concatenated = not_coerced + 'string'

 

直接報錯:TypeError: cannot concatenate 'str' and 'int' objects

只有提前把num轉換為字符串類型才能正確運行

1 # Python
2 not_coerced = 1
3 concatenated = str(not_coerced) + 'string'

 

2. Functions ormethods?

在JavaScript和Python中,函數和條件的結構極為相似。例如:

 1 // JavaScript
 2 function drSeuss(catInTheHat, thing1, thing2) {
 3   if (catInTheHat == true &&
 4     thing1 == true &&
 5     thing2 == true) {
 6     console.log('is cray');
 7   } else if (catInTheHat != true) {
 8     console.log('boring');
 9   } else {
10     console.log('so boring');
11   }
12 }

 

 1 # Python
 2 def dr_seuss(cat_in_the_hat, thing1, thing2):
 3   if cat_in_the_hat == True and
 4     thing2 == True and
 5     thing2 == True:
 6     print 'is cray'
 7   elif cat_in_the_hat != True:
 8     print 'boring'
 9   else:
10     print 'so boring'

 

但在JavaScript中,“methods”的通俗定義是指語言規范中內置的方法,例如:Function.prototype.apply() MDN上有對二者的解釋: 在大多數方面,Functionsmethods相同,但有兩個主要區別:

  • methods可以被隱式傳遞到調用該methods的對象上。

  • methods能夠對類中包含的數據進行操作。

然鵝,在JavaScript中,“類”只是語法糖的存在,稍后我們再進行對比。

3. 模板字符串

在模板字符串上,JavaScript之前是領先於python的。

1 // JavaScript
2 let exclamation = 'Whoa!';
3 let sentence = `They are really similar to Python.`;
4  
5 console.log(`Template Literals: ${exclamation} ${sentence}`);

 

1 # python
2 print '打印: {} {}'.format('Whoa.', 'Quite!')
3 # 打印: Yup. Quite!

{}充當占位符。 這種語法被詬病頗多,於是在后來的Python3.6版本中,又提供了一種字符串格式化語法——f-strings

直接對比:

1 name = "Tom"
2 age = 3
3 print(f"他叫 {name}, {age} 歲")
4 # "他叫Tom, 3 歲"

 

4. 參數默認值

JavaScript再次完美“借鑒”Python:

1 // JavaScript
2 function nom(food="ice cream") {
3   console.log(`Time to eat ${food}`);
4 }
5  
6 nom();// Time to eat ice cream

 

1 # Python
2 def nom(food="ice cream"):
3   print 'Time to eat {}'.format(food)
4  
5 nom() # Time to eat ice cream

 

5. 其余參數和* args

Rest參數語法,使我們可以將不定數量的參數表示為數組,傳入函數中。

  • 在Python中,它們稱為* args

  • 在JavaScript中...xxx就表示為其余參數。

 1 // JavaScript
 2 function joke(question, ...phrases) {
 3   console.log(question);
 4   for (let i = 0; i > phrases.length; i++) {
 5     console.log(phrases[i]);
 6   }
 7 }
 8 
 9 let es6Joke = "Why does JS single out one parameter?"
10 joke(es6Joke, "Because it doesn't", 'really like', 'all the REST of them!');
11  
12 // Why does JS single out one parameter?
13 // Because it doesn't
14 // really like
15 // all the REST of them!

 

 1 # Python
 2 def pirate_joke(question, *args):
 3   print question
 4   for arg in args:
 5     print arg
 6  
 7 python_joke = "What's a Pyrate's favorite parameter?"
 8  
 9 pirate_joke(python_joke, "*args!", "*arrgs!", "*arrrgs!")
10  
11 # What's a Pyrate's favorite parameter?
12 # *args!
13 # *arrgs!
14 # *arrrgs!

 

6. Classes:類

眾所周知,ES6類實際上是語法糖。 Python具有內置的類,可以快速,輕松地進行面向對象的編程。

而JavaScript原型鏈繼承,是每個前端的必須課。

 1 // JavaScript
 2 class Mammal {
 3   constructor() {
 4     this.neocortex = true;
 5   }
 6 }
 7  
 8 class Cat extends Mammal {
 9   constructor(name, years) {
10     super();
11     this.name = name;
12     this.years = years;
13   }
14  
15   eat(food) {
16     console.log('nom ' + food);
17   }
18 }

 

 1 # Python
 2 class Mammal(object):
 3   neo_cortex = True
 4  
 5 class Cat(Mammal):
 6   def __init__(self, name, years):
 7     self.name = name
 8     self.years = years
 9  
10   def eat(food):
11     print 'nom %s' % (food)
12  
13 fry_cat = Cat('Fry', 7)
14 fry_cat.eat('steak')

 

心而論,Python的寫法更優雅。。。

7. Modules and import:模塊

ES6的模塊語言借鑒於python,卻優秀於它。兩者之間有一些區別:

  • JavaScript導入是靜態的;Python是動態的。

  • JavaScript模塊必須顯式導出。在Python中,所有模塊均可導入。

  • JavaScript具有默認導出的概念。Python沒有。

1 # python
2 import mymodule
3 mymodule.myfunc()

 

1 // javascript
2 import * as myalias from "./mymodule";
3 myalias.myfunc();

1. 導入分模塊

在javascript中,我們想導入分模塊直接解構賦值就可以了

1 // javascript
2 import { myvar, myfunc } from "./mymodule";
3 console.log(myvar);
4 myfunc();

而在python,其語義則相反:

1 # python
2 from mymodule import myvar, myfunc
3 print myvar
4 myfunc()

2. 導出空函數

如何想導出一段空函數,python需要用到“pass“關鍵詞占位,避免運行出錯。 mymodule.py:

# python
def myfunc(): pass

// javascript
export function myfunc() {}

前端如何優雅學會Python?

許多前端對Python的熱情始於好奇,終於停滯。

距離實干做開發有技術差距,也無人指點提帶,也不知當下水平能干嘛?就在這樣的疑惑循環中,編程技能止步不前,而爬蟲是最好的進階方向之一。

網絡爬蟲是Python比較常用的一個場景,國際上,google在早期大量地使用Python語言作為網絡爬蟲的基礎,帶動了整個Python語言的應用發展。

就我個人發展而已,我也十分推薦以爬蟲為應用入門,原因有幾項:

  • 爬蟲是針對web頁面的一種應用技術,前端可以無痛銜接很多知識。

  • 爬蟲的第一步是獲取頁面源碼,然后做信息抽取。其中針對dome節點的class/id選擇,前端無需再度學習。

  • 爬蟲中的虛擬登錄及Selenium,可以提升前端對於自動化測試的理解。

  • 爬蟲的最終形態是搜索引擎,當中的SEO是每個前端都需要關注的點兒。

  • 在了解搜索引擎爬蟲的過程中,前端可以搞清楚服務端渲染SSR和單頁應用CSR的不同作用。

爬蟲分兩種方式:面向頁面和面向接口

  • 面向頁面,前端自然輕車熟路。

  • 面向接口,需要了解到如何用抓包軟件(Fiddler/Charles)。

  • 在這過程中,又能學會一項技能 - 抓包。以后不用再看着Network傻傻刷新了。

始於爬蟲,卻不止於爬蟲:

爬蟲—> 數據清洗 -> 數據庫操作 -> 數據清洗 -> 數據挖掘 -> 數據分析 ...

這一條鏈下去,你可以學到非常非常多的知識:

Scrapy爬蟲框架,Redis分布式事務,數據處理Pandas,自然語言分析NLP,完整實現數據可視化等等....

關於語言的討論,我非常贊同李兵老師的這段話:

在這里插入圖片描述

3. 潘石屹都在學Python

在這里插入圖片描述

在這里插入圖片描述 .


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM