python语言包括哪些实现_Python语言基础考察点:python语言基础常见考题(一)
一、python是靜態(tài)還是動(dòng)態(tài)類(lèi)型?是強(qiáng)類(lèi)型還是弱類(lèi)型?
1、動(dòng)態(tài)強(qiáng)類(lèi)型語(yǔ)言(不少人誤以為是弱類(lèi)型)
不要傻傻分不清
2、動(dòng)態(tài)還是靜態(tài)指的是編譯期還是運(yùn)行期確定類(lèi)型
3、強(qiáng)類(lèi)型指的是不會(huì)發(fā)生隱式類(lèi)型轉(zhuǎn)換
若類(lèi)型語(yǔ)言
強(qiáng)類(lèi)型語(yǔ)言
4、python作為后端語(yǔ)言優(yōu)缺點(diǎn)
1、膠水語(yǔ)言、輪子多、應(yīng)用廣泛
2、語(yǔ)言靈活、生產(chǎn)力高
3、性能問(wèn)題、代碼維護(hù)問(wèn)題、python2/2兼容問(wèn)題
動(dòng)態(tài)語(yǔ)言一時(shí)爽、代碼重構(gòu)火葬場(chǎng)
二、什么是鴨子類(lèi)型
當(dāng)看到一只鳥(niǎo)走起來(lái)想鴨子、有用起來(lái)像鴨子、叫起來(lái)也想鴨子、那么這只鳥(niǎo)就可以被稱(chēng)為鴨子
1、關(guān)注點(diǎn)在對(duì)象的行為,而不是類(lèi)型(duck typing)
2、比如 file、StringIO,socket對(duì)象都支持read/write方法(file like object)
2、在比如定義了 _iter_魔術(shù)方法的隊(duì)形可以用for迭代
代碼驗(yàn)證
1、代碼
class Duck():
def quack(self):
print("gua gua")
class Person:
def quack(self):
print("我是人類(lèi),但我也會(huì) gua gua gua")
def in_the_forest(duck):
duck.quack()
def game():
donald = Duck()
john = Person()
in_the_forest(donald)
in_the_forest(john)
print(type(donald))
print(type(john))
print(isinstance(donald,Duck))
print(isinstance(john,Person))
game()
2、輸出結(jié)果
duck_type.py
gua gua
我是人類(lèi),但我也會(huì) gua gua gua
True
True
Process finished with exit code 0
三、什么是monkey patch?那些地方用到了?自己如何實(shí)現(xiàn)?
1、所謂的monkey patch就是運(yùn)行時(shí)替換
2、比如gevent庫(kù)需要修改內(nèi)置的socket
3、from gevent import monkey;monkey.patch_socket()
1、安裝gevent
1.在https://pypi.org/project/gevent/#files下載你需要的gevent版本,保存到一個(gè)文件夾中
2.在cmd中,cd到你Python的Script下進(jìn)行安裝
3.cd 到你下載好的gevent 路徑
4.進(jìn)入gevent路徑的系統(tǒng)盤(pán)中
5.pip install 下載好的gevent模塊名
2、gevent庫(kù)需要修改內(nèi)置的socket
import socket
import gevent
print(socket.socket)
print("After momkey patch")
from gevent import monkey
monkey.patch_socket()
print(socket.socket)
import select
print(select.select)
monkey.patch_socket()
print("After momkey patch")
print(select.select)
輸出如下:
monkey_path.py
After momkey patch
After momkey patch
3、自己實(shí)現(xiàn)monkey patch
import socket
import gevent
print(socket.socket)
print("After momkey patch")
from gevent import monkey
monkey.patch_socket("After momkey patch")
print(socket.socket)
import select
print(select.select)
monkey.patch_socket()
print("After momkey patch")
print(select.select)
import time
print(time.time())
def _time():
return 1234
time.time = _time
print(time.time())
輸出結(jié)果如下:
monkey_path.py
After momkey patch
After momkey patch
1564107393.6268823
1234
Process finished with exit code 0
四、什么是自省?
運(yùn)行時(shí)判斷一個(gè)對(duì)象的類(lèi)型的能力
python一切皆對(duì)象、用type、id、isinstance獲取對(duì)象類(lèi)型信息
ll = [1, 2, 3]
d = dict(a=1) #{a:1}
print(type(ll))
print(type(d))
print(isinstance(ll, list))
print(isinstance(d, dict))
def add(a, b):
if isinstance(a, int):
return a + b
elif isinstance(a, str):
return a.upper()+b
print(add(1, 2))
print(add(‘head‘, ‘tail‘))
輸出結(jié)果如下:
introspection.py
True
True
3
HEADtail
Process finished with exit code 0
Inspect模塊提供了更多獲取時(shí)對(duì)象信息的函數(shù)
ll = [1, 2, 3]
d = dict(a=1) #{a:1}
print(type(ll))
print(type(d))
print(isinstance(ll, list))
print(isinstance(d, dict))
def add(a, b):
if isinstance(a, int):
return a + b
elif isinstance(a, str):
return a.upper()+b
print(add(1, 2))
print(add(‘head‘, ‘tail‘))
print(id(ll))
print(id(d))
print(ll is d)
print(ll is ll)
輸出結(jié)果如下:
introspection.py
True
True
3
HEADtail
17718152
17742664
False
True
Process finished with exit code 0
五、什么是列表和字典推導(dǎo)
比如[i for i in range(10) if i % 2 == 0]
一種快速生成list/dict/set的方式,用來(lái)替代map/filter等
(i for i in range(10) if i % 2 == 0)返回生成器
a = [‘a(chǎn)‘, ‘b‘, ‘c‘]
b =[1, 2, 3]
# d = {‘a(chǎn)‘:1, ‘b‘:2, ‘c‘:3}
d = {}
for i in range(len(a)):
d[a[i]] = b[i]
print(d)
d = {k: v for k, v in zip(a,b)}
print(d)
輸出結(jié)果:
compresion.py
{‘c‘: 3, ‘b‘: 2, ‘a(chǎn)‘: 1}
{‘c‘: 3, ‘b‘: 2, ‘a(chǎn)‘: 1}
六、知道python之禪嗎?
Tim Peters 編寫(xiě)的關(guān)于Python編寫(xiě)的準(zhǔn)則
import this
編程拿不準(zhǔn)的時(shí)候可以參考
In [8]: import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren‘t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you‘re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it‘s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let‘s do more of those!
原文地址:https://www.cnblogs.com/luoahong/p/11251661.html
總結(jié)
以上是生活随笔為你收集整理的python语言包括哪些实现_Python语言基础考察点:python语言基础常见考题(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ASCII码字符对照表
- 下一篇: 当下大部分互联网创业公司为什么都愿意采用