Python语言基础考察点:python语言基础常见考题(一)

一、python是静态还是动态类型?是强类型还是弱类型?

1、动态强类型语言(不少人误以为是弱类型)

不要傻傻分不清

2、动态还是静态指的是编译期还是运行期确定类型

3、强类型指的是不会发生隐式类型转换

若类型语言

强类型语言

4、python作为后端语言优缺点

1、胶水语言、轮子多、应用广泛
2、语言灵活、生产力高
3、性能问题、代码维护问题、python2/2兼容问题

动态语言一时爽、代码重构火葬场

二、什么是鸭子类型

当看到一只鸟走起来想鸭子、有用起来像鸭子、叫起来也想鸭子、那么这只鸟就可以被称为鸭子

1、关注点在对象的行为,而不是类型(duck typing)

2、比如 file、StringIO,socket对象都支持read/write方法(file like object)

2、在比如定义了 _iter_魔术方法的队形可以用for迭代

代码验证

1、代码

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)
    print(type(donald))
    print(type(john))
    print(isinstance(donald,Duck))
    print(isinstance(john,Person))

game()

2、输出结果

duck_type.py
gua gua
我是人类,但我也会 gua gua gua
<class ‘__main__.Duck‘>
<class ‘__main__.Person‘>
True
True

Process finished with exit code 0

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

1、所谓的monkey patch就是运行时替换

2、比如gevent库需要修改内置的socket

3、from gevent import monkey;monkey.patch_socket()

1、安装gevent

1.在https://pypi.org/project/gevent/#files下载你需要的gevent版本,保存到一个文件夹中

2.在cmd中,cd到你Python的Script下进行安装

3.cd 到你下载好的gevent 路径

4.进入gevent路径的系统盘中 

5.pip install 下载好的gevent模块名

2、gevent库需要修改内置的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
<class ‘socket.socket‘>
After momkey patch
<class ‘gevent._socket3.socket‘>
<built-in function select>
After momkey patch
<built-in function select>

3、自己实现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())

输出结果如下:
monkey_path.py
<class ‘socket.socket‘>
After momkey patch
<class ‘gevent._socket3.socket‘>
<built-in function select>
After momkey patch
<built-in function select>
1564107393.6268823
1234

Process finished with exit code 0

四、什么是自省?

运行时判断一个对象的类型的能力

python一切皆对象、用type、id、isinstance获取对象类型信息

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‘))

输出结果如下:

introspection.py
<class ‘list‘>
<class ‘dict‘>
True
True
3
HEADtail

Process finished with exit code 0

Inspect模块提供了更多获取时对象信息的函数

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)

输出结果如下:
introspection.py
<class ‘list‘>
<class ‘dict‘>
True
True
3
HEADtail
17718152
17742664
False
True

Process finished with exit code 0

五、什么是列表和字典推导

比如[i for i in range(10) if i % 2 == 0]

一种快速生成list/dict/set的方式,用来替代map/filter等

(i for i in range(10) if i % 2 == 0)返回生成器

a = [‘a‘, ‘b‘, ‘c‘]

b =[1, 2, 3]

# d = {‘a‘: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)

输出结果:
compresion.py
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1}
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1}

六、知道python之禅吗?

Tim Peters 编写的关于Python编写的准则

import this

编程拿不准的时候可以参考

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

时间: 2024-07-29 22:07:57

Python语言基础考察点:python语言基础常见考题(一)的相关文章

第3章 py基础考察点

py基础考察点 py语言特性 py是动态强类型语言 动态还是静态指的是编译期还是运行期确定类型 强类型指的是不会发生隐式类型装换 为什么使用py? * 胶水语言,轮子多,应用广泛 * 语言灵活,生产力高 * 性能问题,代码维护问题,py2/py3不兼容 什么是鸭子类型? 当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也像鸭子,那么这只鸟就可以被称为鸭子 关注点 在对象的行为,而不是类型(duck typing) eg: file,StringIO,socket对象都支持read/write方法

D03——C语言基础学习PYTHON

C语言基础学习PYTHON--基础学习D02 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 8 函数式编程 9 小结 10 小练习:ATM+购物车程序 1 函数的基本概念 a 函数定义 b 函数特性 c 定义函数 a 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. b 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 c:语法

D05——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime (3)random (4)os (5)sys (6)json&pickle (7)shelve (8)xml (9)shutil (10)PyYaml (11)configpaser (12)hashlib (13)re 5 练习:开发一个简单的python计算器(挑战性很强) 1 模块 模块: &g

D13——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D12 20180918内容纲要: 堡垒机运维开发 1.堡垒机的介绍 2.堡垒机的架构 3.小结 4.堡垒机的功能实现需求 1 堡垒机的介绍 百度百科 随着信息安全的快速发展,来自内部的安全威胁日益增多,综合防护.内部威胁防护等思想越来越受到重视,而各个层面的政策合规,如"萨班斯法案"."信息系统等级保护"等等也纷纷对运维人员的操作行为审计提出明确要求.堡垒机作为运维安全审计产品将成为信息系统安全的最后一道防线,其作用也将越来越

D02——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D02 20180801内容纲要: 1 字符串的系列操作 2 集合 3  文件的读写 4 字符编码转换 5 小结 6 练习:三级菜单(有彩蛋) 1 字符串的系列操作 特性:不可修改.('str' object does not support item assignment) 支持运算:切片.索引.min().max().len()等 关于字符串的操作: #关于字符串的一些操作 ''' name = "zhang\tkanghui" print(n

D08——C语言基础学PYTHON

语言基础学习PYTHON--基础学习D08 20180829内容纲要: socket网络编程 1  socket基础概念 2  socketserver 3  socket实现简单的SSH服务器端和客户端 4  粘包 5  小结 6 练习 0  我是小白 先认识一些关键词: TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议, 由IETF的RFC 793定义.在简化的计算机网络OSI模型中,它完成第四层传输层所指定

D10——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D10 20180906内容纲要: 1.协程 (1)yield (2)greenlet (3)gevent (4)gevent实现单线程下socket多并发 2.简单爬虫 3.select 4.IO多路复用 5.小结 6.练习 1 协程 协程又叫微线程,纤程.协程是一种用户态的轻量级线程.协程有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文.和栈保存到其他地方,在切换回来的时候回复先前保存的寄存器上下文和栈.协程能保存上一次调用时的状态.一个cpu支

D16——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D15 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b.标签操作 c.创建标签 d.提交表单 e.事件操作 f.事件的捕捉与冒泡 5.js语法分析 6.小结 7.练习 1 JavaScript介绍 JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言.同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功

D17——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D17 20181014内容纲要: 1.jQuery介绍 2.jQuery功能介绍 (1)jQuery的引入方式 (2)选择器 (3)筛选 (4)文本操作 (5)样式操作 (6)属性操作 (7)文本处理 (8)css处理 (9)位置 (10)事件 (11)jQuery扩展 3.实例展示 4.小结 5.推荐 1 jQuery介绍 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或Java