1. Python为什么是解释型语言
**编译型语言:**一些编程语言要求必须提前将所有源代码一次性转换成二进制指令,就是生成一个可执行程序(Windows 下的 .exe)。比如C语言、C++、Golang、Pascal(Delphi)等,这种编程语言称为编译型语言,使用的转换工具称为编译器。
**解释型语言:**一些编程语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序。比如 Python、JavaScript、PHP、Shell 等,这种编程语言称为解释型语言,使用的转换工具称为解释器。
2. 面向对象和面向过程的区别
面向对象是把构成问题的事务分解成各个对象,建立对象来描述某个事务在解决问题的步骤中的行为;
面向过程是分析出解决问题所需要的步骤,然后用一些函数把这些步骤一步步实现,使用的时候依次调用函数就行了。
3. Python有什么优点和缺点
解释型,语法简单易懂,可读性强;
有很多库可以用,可以让我们站在巨人的肩膀上简单的实现想要的功能;
可扩展,和其他编程语言或其他软件有可连接的接口;
免费开源、可移植;
自动内存管理,让程序员可以专注于代码的实现;
缺点:
他的可解释特征使其运行速度变慢;
动态语言的特点可能会增加运行时错误。
4. 装饰器
python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。
一般情况下调用装饰器:
import time
def decorator(func):
def wrapper():
print(time.time()) #先执行
func()#返回值(一个函数) 再执行函数f1结果如下
return wrapper
#以上内容就是一个装饰器,即wrapper被decorator包裹起来,像一个装饰器
def f1():
print('This is a function')
f=decorator(f1)
f()
#运行结果为
# 1533530657.8872964
#This is a function
'相当于执行了wrapper里面的内容'
注:A、 @符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作。
有了语法糖之后调用装饰器,可以直接调用,不需要加小括号了:
'如果一个装饰器只能完成一个函数的使用,那将失去意义,所以我们要实现未知函数参数个数的调用'
import time
def decorator(func):
def wrapper(*args):#*args为可变参数
print(time.time())
func(*args)
return wrapper
@decorator
def f1(func_name):
print('This is a function '+func_name)
@decorator
def f2(func_name1,func_name2):
print('This is a function '+func_name1)
print('This is a function '+ func_name2)
f1('test1')
f2('test2','test2')
#运行结果为
#1533534463.567321
#This is a function test1
#1533534463.567321
#This is a function test2
#This is a function test2
B、python的三个内置函数:
@classmethod:类方法,类方法是给类用的,类在使用时会将类本身当做参数传给类方法的第一个参数,python为我们内置了函数classmethod来把类中的函数定义成类方法。
@staticmethod:静态方法用上面两个装饰器就可以不用在实用类前对类进行实例化了,
@property:将一个实例方法提升为属性,便于访问
5. 深拷贝、浅拷贝和等号赋值
**深拷贝:**原对象的外层/内层元素地址都变化。
**浅拷贝:**原对象的外层元素地址变化,内层元素的地址不变。这个就好理解了,前女友对你彻底死心,无论你怎么变都不要你了。
**复制:**原对象怎么变,我跟着变。
对复制/浅拷贝/深拷贝的对象进行改变,看原对象的变化:
import copy
a = [1, 2, [3, 4]]
print('原对象a: ',id(a), a)
# 复制
b = a
# 浅拷贝
c = copy.copy(a)
# 深拷贝
d = copy.deepcopy(a)
b[0] =

最低0.47元/天 解锁文章
1418

被折叠的 条评论
为什么被折叠?



