Python 最常见的 170 道面试题全解析:2019 版(答案收集)
语言特性1.谈谈对 Python 和其他语言的区别:答:Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库,他是一门强类型的可移植、可扩展,可嵌入的解释型编程语言,属于动态语言。
拿 C 语言和 Python 比: Python 的第三方类库比较齐全并且使用简洁,很少代码就能实现一些功能,如果用 C 去实现相同的功能可能就比较复杂。
但是对于速度来说 Python 的运行速度相较于 C 就比较慢了。
所以有利的同时也有弊端,毕竟我们的学习成本降低了。
如需了解更多,你还可以去看详情
2.简述解释型和编译型编程语言:解释型语言是在运行程序的时候才翻译,每执行一行,要翻译一行,边翻译边执行,效率较低。
编译型就是直接编译成机型可以执行的,只翻译一次,所以效率相对来说较高。
如需了解更多,你还可以去看详情
3.Python 的解释器种类以及相关特点?CPython c 语言开发的,使用最广的解释器
IPython 基于 cPython 之上的一个交互式计时器,交互方式增强功能和 cPython 一样
PyPy 目标是执行效率,采用 JIT 技术。对 P ...
Flask 蓝图(Blueprint)使用方式解析
本文转自:https://www.jianshu.com/p/95b584e4f76e
Flask蓝图提供了模块化管理程序路由的功能,使程序结构清晰、简单易懂。下面分析蓝图的使用方法
假如说我们要为某所学校的每个人建立一份档案,一个很自然的优化方式就是这些档案如果能分类管理,就是说假如分为老师、学生、后勤人员等类别,那么后续查找和管理这些档案就方便清晰许多。Flask的蓝图就提供了类似“分类”的功能。
下面先上一张较大型程序的组织结构图
1
可以看到在app文件夹下有两个文件夹main和auth内含有视图函数,而main和auth就是注册的两个蓝图。1. 蓝图的创建及注册
在图1中,以main文件夹为例。在main文件夹的__init__.py文件中,可创建蓝图,代码如下:
2
从Flask中导入Blueprint类,再创建一个实例即可。Blueprint接受两个参数实例化, ...
兄弟会_flask笔记02
蓝图什么是蓝图用于实现单个应用的视图,模板,静态文件的集合蓝图就是模块化处理的类
为什么要用蓝图随着业务代码的增加,把所有的代码都写进一个程序文件中是非常不合适的
这不仅
readme.md微信小程序+flask 项目设计图书借阅小程序 图书列表 图书详情 图书查询 图书录入 图书借阅,归还 个人中心,借阅信息
flask api 小程序api接口服务 admin 后台管理 图书管理 添加 查询 修改 下架 借阅管理 查看 修改 用户管理 查看所有注册使用的用户,修改状态
查询到的数据json格式不能直接转换成为可用的类型
这可咋整
我们需要处理一下才能转出去
pymysql复习
连接mysql数据库
创建游标对象
执行sql语句
返回结果
关闭连接
1234567891011121314151617181920# 导包i ...
简述编译型与解释型编程语言
概念:
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!
区别:
编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。
解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.
通俗的讲,编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。
java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。
**********************************************************************************************
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能值型高级语言编写的程序。
翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间 ...
如何理解面向过程、面向对象、面向切面?它们有什么区别
我们总会听见如下词语:
起步
面向过程编程(opp)
面向对象编程(oop)
面向切面编程(aop)
上面几个词语,都是编程范式。
编程范式是指:编程时所秉承的思想和风格,不同的编程语言对各大编程范式会有不同程度的支持。
不同的编程范式各自会有自己的优点,它们适用在各种不同的情况下:面向过程性能很高,面向对象比较易于管理和维护,面向切面使软件变得更灵活。
在理解编程范式之前,我们一定要知道:
新的编程范式,并不一定完全各方面都优于旧的编程范式,它们只是在某一特定领域或特殊场景下有着独到的优势。
编程范式只有适合不适合项目特性,没有绝对的好坏。
OPP和OOP
OPP是较贴近计算机执行的编程范式。
它主要关注“怎么做”,即完成任务的具体细节。
OOP则是比较贴近人类思维的一种编程范式,它主要关注的是“谁来做”,也就是完成任务的对象,而非细节。
面向过程会将一个任务拆分成各个小的步骤,然后用一个个函数来实现每一个小步骤,再在主函 ...
python之禅
可以在编译器里面输入如下语句来查看python语言的设计哲学:
12345678910111213141516171819202122232425C:\Users\victor>pythonPython 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is bet ...
Python如何判断一个对象是函数还是方法
在Python中,判断一个对象是否是方法有如下三种方法。
1. 根据“__call__”属性判断
有时候用python就有这么一种感悟,各种钩子函数就是通过内置的“__”属性实现,python学得好不好,就是对“__”属性理解得透彻不透彻。
python函数在调用时,一定会首先调用其相关“__call__”函数(没有空格),请参见python总结(四):类装饰器与方法的动态添加中的用法。
add = lambda a, b: a + b
# 判断成功
if(hasattr(add, '__call__')):
print add(1,2)1234
2. 利用callable判断
这是一个据传快要废弃的方法,但是在Python 2中依旧很好用,如下:
# 判断成功
if(callable(add)):
print add(2, 2)123
3. 利用isfunction进行判断
Python的inspect模块包含了大量的与反射、元数据相关的工具函数,isfunction就是其中一种,使用方法如下:
from inspe ...
Python中@classmethod 和@staticmethod用法和区别
@classsmethod
类装饰器:当用此装饰器定义方法时,将类而不是类的实例作为第一个参数,这意味着可以在此方法中直接使用类的属性,而不是特定的实例的属性,因此不必进行硬编码。
@staticmethod 静态装饰器:当用此装饰器定义方法时,不会传递类或实例作为它的参数,这意味着可以在类中放置一个函数。静态方法就是普通的函数,只是碰巧在类的定义体中,而不是在模块层定义。
在《流畅的Python》中,作者对这两个装饰器的评价:classmethod 装饰器非常有用,但是我从未见过不得不用 staticmethod
的情况。如果想定义不需要与类交互的函数,那么在模块中定义就好了。有时,函数虽然从不处理类,但是函数的功能与类紧密相关,因此想把它放在近处。即便如此,在同一模块中的类前面或后面定义函数也就行了。
class Date(object):
<span class="token keyword">def</span> <span class="token function" ...
python之可变数据类型和不可变数据类型
说白了:就看内存地址和数据的值能不能对应上
可变类型:在id(内存地址)不变的情况下,value(值)可以变,则称为可变类型
不可变类型:value(值)一旦改变,id(内存地址)也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
不可变数据类型:Number(数字)、String(字符串)、Tuple(元组);可变数据类型:List(列表)、Dictionary(字典)、Set(集合)
我们可以使用:id()的方式进行查看数据的内存地址, 从对象内存地址方向来说:可变数据类型:在内存地址不变的情况下,值可改变(列表和字典是可变类型,但是字典中的 key 值必须是不可变类型)不可变数据类型:内存地址改变,值也跟着改变。(数字,字符串,布尔类型,都是不可变类型)可以通过 id() 方法进行内存地址的检测。
Python中的装饰器:Decorator
理解Python装饰器(Decorator)
Python装饰器看起来类似Java中的注解,然鹅和注解并不相同,不过同样能够实现面向切面编程。
想要理解Python中的装饰器,不得不先理解闭包(closure)这一概念。
闭包
看看维基百科中的解释:
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function
closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
官方的解释总是不说人话,but--talk is cheap,show me the code:
# print_msg是外围函数
def print_msg():
msg = "I'm closure"
<span class="token comment"># printer是嵌套函数</span>
<span class=&q ...