小小小虎

Python语言基础常考题

一、Python语言特性
Python是静态还是动态类型?是强类型还是弱类型?

1.动态强类型语言(不少人误以为是弱类型)
2.动态还是静态指的是编译期还是运行期确定类型
3.强类型指的是不会发生隐式类型转换

二、Python作为后端语言优缺点
为会么要仍Python?
1.胶水语言,轮子多,应用广泛
2.语言灵活,生产力高
3.性能问题、代码维护问题、python2/3兼容问题

三、什么是鸭子类型
”当你看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"

1.关注点在对象的行为,而不是类型(duck typing)
2.比如 file,StringIO,socket对象都支持read/write方法(file like object)
3.再比如定义了__iter__魔术方法的对象可以用for迭代

代码示例:

class Duck:
def quack(self):
print("gua gua")

class Person:
def quack(self):
print("我是人类,但我也会 gua gua gua")

def in_the_forest(duck):
duck.quack()

def game():
donald = Duck()
john = Person()
in_the_forest(donald)
in_the_forest(john)

game()

运行结果:

 

 


四、什么是monkey patch
什么是 monkey patch?哪些地方用到了?自己如何实现?

1.所谓的 monkey patch就是运行时替换
2.比如 gevent 库需要修改内置的 socket
3.from gevent import monkey; monkey.patch_socket()

代码示例:

import socket
print(socket.socket)

print("After monkey patch")
from gevent import monkey
monkey.patch_socket()
print(socket.socket)

import select
print(select.select)
monkey.patch_select()
print("After monkey patch")
print(select.select

运行结果:

 

 

自己如何实现呢

import time

print(time.time())

def _time():
return 1234

time.time = _time

print(time.time())


五、什么是自省
Introspection
1.运行时判断一个对象的类型的能力
2.Python一切皆对象,用type,id,isinstance 获取对象类型信息
3.Inspect模块提供了更多获取对象信息的函数

代码示例:

ll = [1, 2, 3]
d = dict(a=1) # {a:1}

print(type(ll)) # <class 'list'>
printL(type(d)) # <class 'dict'>

print(isinstance(ll, list)) # True
print(isinstance(d, dict)) # True

def add(a, b):
isinstance(a, int):
return a + b
elif isinstance(a, str):
return a.upper() + b

print(add(1, 2)) # 3
print(add('head', 'tail')) # HEADtail


print(id(ll)) # ll在内存中的地址 4308266248,每次都是不一样的
print(id(d)) # 同理,4308272832
print(ll is d) # False
print(ll is ll) # True


六、什么是列表和字典推导
List Comprehension

1.比如 [i for i in range(10) if i % 2 == 0]
2.一种快速生成 list/dict/set的方式。用来替代 map/filter等
3.(i for i in range(10) if i % 2 == 0) 返回生成器

代码示例:

# 将两个列表组件成字典 d = {'a': 1, 'b': 2, 'c': 3}
a = ['a', 'b', 'c']
b = [1, 2, 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)

运行结果:

 

 


七、知道Python之禅吗
The Zen of Python
1.Tim Peters 编写的关于Python编程的准则
2.import this
3.编程拿不准的时候可以参考

posted on 2021-06-05 00:40  小小小虎  阅读(318)  评论(0编辑  收藏  举报

导航