Python 將作為第二語言?
前言
“如何擺脫不停切圖的困局?”
這不是一篇製造焦慮的文章,而是充滿真誠建議的Python
推廣文。
當談論到程式設計入門語言時,大多數都會推薦Python
和JavaScript
。
實際上,兩種語言在方方面面都非常強大。
而如今我們熟知的ES6
語言,很多語法都是借鑑Python
的。
有一種說法是“能用js實現的,最後一定都會用js實現。”
那麼這裡可以說:“能跟python
長得像的,最後一定會像python
。”
1.Python
和ES6
語法差別
1. 基本型別
值得注意的是,儘管兩者都是動態型別,但python
連線時並不會自動轉換型別。
// JavaScript
let coerced = 1;
let concatenated = coerced + 'string';
// Python
not_coerced = 1
concatenated = not_coerced + 'string'
直接報錯:TypeError: cannot concatenate 'str' and 'int' objects
只有提前把num
轉換為字串型別才能正確執行
# Python
not_coerced = 1
concatenated = str(not_coerced) + 'string'
2.Functions
ormethods
?
在JavaScript
和Python
中,函式和條件的結構極為相似。例如:
// JavaScript
function drSeuss(catInTheHat, thing1, thing2) {
if (catInTheHat == true &&
thing1 == true &&
thing2 == true) {
console.log('is cray');
} else if (catInTheHat != true) {
console.log('boring');
} else {
console.log('so boring');
}
}
# Python
def dr_seuss(cat_in_the_hat, thing1, thing2):
if cat_in_the_hat == True and
thing2 == True and
thing2 == True:
print 'is cray'
elif cat_in_the_hat != True:
print 'boring'
else:
print 'so boring'
但在JavaScript
中,“methods
”的通俗定義是指語言規範中內建的方法,例如:Function.prototype.apply()
在MDN
上有對二者的解釋:
在大多數方面,Functions
和methods
相同,但有兩個主要區別:
methods
可以被隱式傳遞到呼叫該methods
的物件上。methods
能夠對類中包含的資料進行操作。
然鵝,在JavaScript
中,“類”只是語法糖的存在,稍後我們再進行對比。
3. 模板字串
在模板字串上,JavaScript
之前是領先於python
的。
// JavaScript
let exclamation = 'Whoa!';
let sentence = `They are really similar to Python.`;
console.log(`Template Literals: ${exclamation} ${sentence}`);
# python
print '列印: {} {}'.format('Whoa.', 'Quite!')
# 列印: Yup. Quite!
{}
充當佔位符。 這種語法被詬病頗多,於是在後來的Python3.6
版本中,又提供了一種字串格式化語法——f-strings
。
直接對比:
name = "Tom"
age = 3
print(f"他叫 {name}, {age} 歲")
# "他叫Tom, 3 歲"
4. 引數預設值
JavaScript
再次完美“借鑑”Python
:
// JavaScript
function nom(food="ice cream") {
console.log(`Time to eat ${food}`);
}
nom();// Time to eat ice cream
# Python
def nom(food="ice cream"):
print 'Time to eat {}'.format(food)
nom() # Time to eat ice cream
5. 其餘引數和* args
Rest
引數語法,使我們可以將不定數量的引數表示為陣列,傳入函式中。
- 在
Python
中,它們稱為* args
- 在
JavaScript
中...xxx
就表示為其餘引數。
// JavaScript
function joke(question, ...phrases) {
console.log(question);
for (let i = 0; i > phrases.length; i++) {
console.log(phrases[i]);
}
}
let es6Joke = "Why does JS single out one parameter?"
joke(es6Joke, "Because it doesn't", 'really like', 'all the REST of them!');
// Why does JS single out one parameter?
// Because it doesn't
// really like
// all the REST of them!
# Python
def pirate_joke(question, *args):
print question
for arg in args:
print arg
python_joke = "What's a Pyrate's favorite parameter?"
pirate_joke(python_joke, "*args!", "*arrgs!", "*arrrgs!")
# What's a Pyrate's favorite parameter?
# *args!
# *arrgs!
# *arrrgs!
6.Classes
:類
眾所周知,ES6
類實際上是語法糖。Python
具有內建的類,可以快速,輕鬆地進行面向物件的程式設計。
而JavaScript
原型鏈繼承,是每個前端的必須課。
// JavaScript
class Mammal {
constructor() {
this.neocortex = true;
}
}
class Cat extends Mammal {
constructor(name, years) {
super();
this.name = name;
this.years = years;
}
eat(food) {
console.log('nom ' + food);
}
}
# Python
class Mammal(object):
neo_cortex = True
class Cat(Mammal):
def __init__(self, name, years):
self.name = name
self.years = years
def eat(food):
print 'nom %s' % (food)
fry_cat = Cat('Fry', 7)
fry_cat.eat('steak')
平心而論,Python
的寫法更優雅。。。
7.Modules and import
:模組
ES6
的模組語言借鑑於python
,卻優秀於它。 兩者之間有一些區別:
JavaScript
匯入是靜態的;Python
是動態的。JavaScript
模組必須顯式匯出。在Python
中,所有模組均可匯入。JavaScript
具有預設匯出的概念。Python
沒有。
# python
import mymodule
mymodule.myfunc()
// javascript
import * as myalias from "./mymodule";
myalias.myfunc();
1. 匯入分模組
在javascript
中,我們想匯入分模組直接解構賦值就可以了
// javascript
import { myvar, myfunc } from "./mymodule";
console.log(myvar);
myfunc();
而在python
,其語義則相反:
# python
from mymodule import myvar, myfunc
print myvar
myfunc()
2. 匯出空函式
如何想匯出一段空函式,python
需要用到“pass
“關鍵詞佔位,避免執行出錯。 mymodule.py:
# python
def myfunc(): pass
// javascript
export function myfunc() {}
更多詳細對比可以看這篇:Modules and import in ES6 for Python developers
2. 前端如何優雅學會Python
?
許多前端對Python
的熱情始於好奇,終於停滯。
距離實幹做開發有技術差距,也無人指點提帶,也不知當下水平能幹嘛?就在這樣的疑惑迴圈中,程式設計技能止步不前,而爬蟲是最好的進階方向之一。
網路爬蟲是Python
比較常用的一個場景,國際上,google
在早期大量地使用Python
語言作為網路爬蟲的基礎,帶動了整個Python
語言的應用發展。
就我個人發展而已,我也十分推薦以爬蟲為應用入門,原因有幾項:
- 爬蟲是針對
web頁面
的一種應用技術,前端可以無痛銜接很多知識。 - 爬蟲的第一步是獲取頁面原始碼,然後做資訊抽取。其中針對
dome
節點的class/id
選擇,前端無需再度學習。
- 爬蟲中的虛擬登入及
Selenium
,可以提升前端對於自動化測試的理解。 - 爬蟲的最終形態是搜尋引擎,當中的
SEO
是每個前端都需要關注的點兒。 - 在瞭解搜尋引擎爬蟲的過程中,前端可以搞清楚服務端渲染
SSR
和單頁應用CSR
的不同作用。
爬蟲分兩種方式:面向頁面和麵向介面
- 面向頁面,前端自然輕車熟路。
- 面向介面,需要了解到如何用抓包軟體(
Fiddler
/Charles
)。 - 在這過程中,又能學會一項技能 - 抓包。以後不用再看著
Network
傻傻重新整理了。
始於爬蟲,卻不止於爬蟲:
爬蟲—> 資料清洗 -> 資料庫操作 -> 資料清洗 -> 資料探勘 -> 資料分析 ...
這一條鏈下去,你可以學到非常非常多的知識:
Scrapy
爬蟲框架,Redis
分散式事務,資料處理Pandas
,自然語言分析NLP
,完整實現資料視覺化等等....
關於語言的討論,我非常贊同李兵老師的這段話:
3. 潘石屹都在學Python
本文轉自https://juejin.cn/post/6844904004154064910,如有侵權,請聯絡刪除。