一、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语言基础常见考题(一)的更多相关文章

  1. D15——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D15 20180926内容纲要: 1.CSS介绍 2.CSS的四种引入方式 3.CSS选择器 4.CSS常用属性 5.小结 6.练习 1 CSS介绍 层叠样式表 ...

  2. D14——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...

  3. D13——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D13 20180918内容纲要: 堡垒机运维开发 1.堡垒机的介绍 2.堡垒机的架构 3.小结 4.堡垒机的功能实现需求 1 堡垒机的介绍 百度百科 随着信息安 ...

  4. D05——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...

  5. D03——C语言基础学习PYTHON

    C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...

  6. python基础实践 -python是一门动态解释性的强类型定义语言

    python是一门动态解释性的强类型定义语言 Python能做什么? Python是一门综合性的语言,你几乎能在计算机上通过Python做任何事情,以下是Python应该最广泛的几个方面: 1.网络应 ...

  7. D17——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D17 20181014内容纲要: 1.jQuery介绍 2.jQuery功能介绍 (1)jQuery的引入方式 (2)选择器 (3)筛选 (4)文本操作 (5) ...

  8. D16——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D16 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b ...

  9. D12——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D12 20180912内容纲要: 1.数据库介绍 2.RDMS术语 3.MySQL数据库介绍和基本使用 4.MySQL数据类型 5.MySQL常用命令 6.外键 ...

随机推荐

  1. NodeJS添加Jquery依赖

    NodeJS使用时有时候需要JQuery依赖. 新版正确的依赖方式 var jsdom = require('jsdom'); const {JSDOM} = jsdom; const {docume ...

  2. [转帖]ASML EUV光刻机累计生产450万块晶圆:一台12亿元

    ASML EUV光刻机累计生产450万块晶圆:一台12亿元 来源驱动之家 ...网页被我关了 就这样吧. 截至目前,华为麒麟990 5G是唯一应用了EUV极紫外光刻的商用芯片,台积电7nm EUV工艺 ...

  3. Knative 基本功能深入剖析:Knative Eventing 之 Sequence 介绍

    作者 | 元毅,阿里云容器平台高级开发工程师,负责阿里云容器平台 Knative 相关工作. 导读:在实际的开发中我们经常会遇到将一条数据需要经过多次处理的场景,称为 Pipeline.那么在 Kna ...

  4. SQLServer之服务器连接

    目录 SQL Server Management Studio连接 CMD命令行窗口连接 通用数据连接文件连接 SQL Server Management Studio连接 定义 SQL Server ...

  5. Delphi - Logs记录,函数实现MsgDsp

    Logs记录-函数实现MsgDsp 大多数时候,我们不太希望消息以交互的形式出现,这个时候我们可以在窗体上放置一个Memo,然后单独开一个线程进行监视,从而实现把消息实时的显示出来,便于开发者分析. ...

  6. Android 自定义ListView动态加载数据

    我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分 ...

  7. Spring入门。

    程序的耦合和解耦. 1.问题引入. 在使用jdbc和数据库交互时.注册驱动:DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());如 ...

  8. OpenSSL生成私钥和公钥

    1.生成私钥 -- 生成 RSA 私钥(传统格式的) openssl genrsa -out rsa_private_key.pem 1024 -- 将传统格式的私钥转换成 PKCS#8 格式的(JA ...

  9. django_restframework项目之数据库搭建(二)

    数据库配置 创建数据库 """ 1.管理员连接数据库 2.创建数据库 >: create database luffy default charset=utf8; ...

  10. 初学者git的用法

    初学者github的用法 1.在github上创建一个自己的工程 2.按着上面的要求执行你的命令行 3.将你的代码放到这个已经创建了.git的文件夹中,执行git add . 系统出现如下错误:war ...