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!
Python语言基础考察点:python语言基础常见考题(一)的更多相关文章
- D15——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D15 20180926内容纲要: 1.CSS介绍 2.CSS的四种引入方式 3.CSS选择器 4.CSS常用属性 5.小结 6.练习 1 CSS介绍 层叠样式表 ...
- D14——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...
- D13——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D13 20180918内容纲要: 堡垒机运维开发 1.堡垒机的介绍 2.堡垒机的架构 3.小结 4.堡垒机的功能实现需求 1 堡垒机的介绍 百度百科 随着信息安 ...
- D05——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...
- D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...
- python基础实践 -python是一门动态解释性的强类型定义语言
python是一门动态解释性的强类型定义语言 Python能做什么? Python是一门综合性的语言,你几乎能在计算机上通过Python做任何事情,以下是Python应该最广泛的几个方面: 1.网络应 ...
- D17——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D17 20181014内容纲要: 1.jQuery介绍 2.jQuery功能介绍 (1)jQuery的引入方式 (2)选择器 (3)筛选 (4)文本操作 (5) ...
- D16——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D16 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b ...
- D12——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D12 20180912内容纲要: 1.数据库介绍 2.RDMS术语 3.MySQL数据库介绍和基本使用 4.MySQL数据类型 5.MySQL常用命令 6.外键 ...
随机推荐
- PG undo redo
除了理所当前的各路文本记录(比方数据库的运行报错日志之类),PG的二进制类日志文件主要有两个,一个就是对应传统数据库理论的redo日志,理论上,所有数据的修改操作都会被记录到这个日志,在事务提交的时候 ...
- MySQL:实用 SQL 语句集合
写在前面的话 本文主要用于记录工作中不经常使用但是偶尔用到又非常有用的 SQL 语句,持续不断不定期更新. 数据库大小统计 1. 查看 MySQL 某个库的所有表大小,记录数,占用空间等. ,), ' ...
- 【leetcode-148】排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1: 输入: 4->2->1->3输出: 1->2->3->4示例 2: 输入: ...
- c# 类实例序列化反序列化json文件 (原发布 csdn 2017-10-01 20:02:12)
前言 前段时间使用了net.json保存对象数据.添加完成后,测试发现300多实例数据保存加载json文件,速度比原方式(BinaryFormatter)慢.但是功能加上后也懒再删掉代码了,索性就采用 ...
- Flutter实体与JSON解析的一种方法
vs code作为编辑器 1. 首先,json对象与字符串的转换是使用json.encode和json.decode的,需要导入import 'dart:convert'; 这里主要的自然不是这个,而 ...
- .Net Core实战教程(一):Linux下搭建项目
.Net Core实战教程(一):Linux下搭建项目 附言 .net core 1.0的时候就开始关注了,一直没有用于项目.真正用于项目我是2.0开始使用的.这几年也总结出一些经验.最近有空就写出来 ...
- Filco圣手二代双模蓝牙机械键盘的连接方法
常规方法 确认键盘的电源接通. 同时按下「Ctrl」+「Alt」+「Fn」执行装置切换模式.配对LED灯(蓝)和低电量显示LED灯(红)约同时亮10秒左右. 想移除已登录的装置时,请从「蓝牙装置登录/ ...
- 深入理解Session和Cookie的区别
Cookie简介 Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制. 目前Cookie已经成为标准,所有的主流浏览器如IE.Netscape.Firefox.Op ...
- Python【day 9】函数入门1
1.什么是函数 函数的概念:对功能或者动作的封装 函数的好处:避免重复代码 2.函数的定义 1.函数的定义 def 函数名(形参列表): 函数体(return) 2.函数的调用 函数名(实参列表) 3 ...
- 开发--CentOS-7安装及配置
开发|CentOS-7安装及配置 本文主要进行详细讲解CentOS7.5系统的安装过程,以及CentOS系统初始化技术.我并不想将这篇文章变成一个教程,尽管我将详细的进行每一步的讲解,enjoy! 前 ...