1.常用字符串格式化哪几种?
python字符串格式化主要有两种方式:分别为占位符(%)和format方式。
format方式-基本语法是通过{}和:来代替以前的%
# 第一种方式,位置映射
>>> "{} {}".format("hello","world")
'hello world'
# 还可以指定显示format中的参数
>>> "{0} {0}".format("hello","world")
'hello hello'
>>> "{0} {1}".format("hello","world")
'hello world'
# 第二种方式,关键字映射
>>> "{name}:{age}".format(name="张三",age=12)
'张三:12'
# 第三种方式 通过列表的索引设置参数
>>> "{0[0]}:{0[1]}".format(("张三",12))
'张三:12'
# 第四种方式 填充对齐
>>> "{0}:{1:0>2}".format("张三",9)
'张三:09'
更加详细的内容了可以阅读说说python有几种字符串格式化
2.简述 生成器、迭代器、可迭代对象 以及应用场景?
可迭代对象:一个具备了__iter__方法的对象,就是一个可迭代的对象。
迭代器:一个实现了__iter__方法和__next__方法的对象,就是迭代器。其中iter方法返回一个迭代器对象,next方法返回容器的下一个元素,直到捕获到StopIteration异常,迭代结束。
生成器:一个函数如何使用了yeild关键字,这个函数就变成了一个生成器。
应用场景:
迭代器的出现使得我们不再将所有要迭代的数据都一次性缓存下来供后续一次读取,这样可以节省大量的存储空间。
使用yeild关键字方式的生成器,可以使程序暂停并且可以继续向下执行。
3.用Python实现一个二分查找的函数。
def binary_search(alist,val):
"""二分查找 递归的版本"""
n = len(alist)
if n > 0:
mid = n//2
if alist[mid] == val:
return True
elif val < alist[mid]:
return binary_search(alist[:mid],val)
else:
return binary_search(alist[mid+1:],val)
return False
def binary_search_2(alist,val):
"""二分查找非递归版本"""
n = len(alist)
first = 0
last = n-1
while first <= last:
mid = (first + last) // 2
if alist[mid] == val:
return True
elif alist[mid] < val:
first = mid + 1
else:
last = mid - 1
return False
4.谈谈你对闭包的理解?
闭包就是在函数的内部再定义一个函数,并且这个函数用到了外边函数的变量,而外部函数返回内部函数的引用,那么将这个函数以及用到的一些变量称之为闭包。
闭包应用最为广泛的地方就是装饰器,装饰器简单的来说就是在不修改原有代码的基础上,为这段代码增加新的功能。
5.os和sys模块的作用?
python中的os模块提供了非常丰富的方法来处理文件和目录
python中的sys模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。
6.如何生成一个随机数?
可以通过python中的random模块,random模块提供了生成随机数的方法。
numpy库也提供了random模块,用于生成多维度数组形式的随机数。
具体的实现方法可以阅读详解Python随机数的生成
7.如何使用python删除一个文件?
想要删除文件,就用到了python中的os模块。
- os.remove()方法用于删除指定路径的文件,如果指定的是一个目录,将抛出OSError,例子如下:
import os
file_path = "./test.py"
if((os.path.exists(file_path))):
os.remove(file_path)
print("删除成功")
else:
print("想要删除的文件不存在!")
- os.removedirs()方法用于递归的删除目录,如果子文件夹删除成功,removedirs()才尝试他们的父文件夹。
- os.mikdir方法用于删除指定路径的目录,仅当这个文件夹是空的才可以,否则,抛出OSError。
8.谈谈你对面向对象的理解?
编程的目的是为了解决生活中的问题,编程的思维方法也应该更加贴近现实生活的思维方式。现实生活中,我们是这样去描述一个人的,比如:这个男生身高很高,身材匀称,长相帅气这一系列的描述就是这个男生的一个特点,也就是这个男生的属性;接着我们描述这个男孩长得像他的母亲,跟他的母亲一样是高鼻梁,这就是继承,继承了他母亲的一些特点;这个男孩不能吃肥肉,而他的妈妈可以吃,这就是相同的行为产生了不同的结果,这就是多态。可以看出面向对象的方式更加贴近我们的实际生活。
面向对象具有三大特性:封装、继承、多态,封装根据职责将属性和方法封装到一个抽象的类中,使得代码更加的清晰。
继承 是多个类中可能会有会存在着相同的属性以及方法,通过继承我们可以提高代码的重用率,并且能够有效的进行代码的管理,当某个类有问题只要修改这个类就行,而其继承这个类的子类往往不需要就修改
多态 是不同的子类对象调用相同的父类方法会产生不同的执行结果,多态增加了代码的灵活度,以继承和重写父类方法为前提。
给大家推荐一个写的比较生动的关于面向对象的理解的文章谈谈我对面向对象以及类与对象的理解
9.Python面向对象中的继承有什么特点?
继承分为单继承和多继承,继承可以实现代码的重用,如果父类的方法不满足子类的需求,可以对父类的方法进行重写,如果部分满足可以继承父类的方法并进行独有部分的扩展。
父类中的私有属性和私有方法不能够继承。
10.面向对象深度优先和广度优先是什么?
python中可以实现类的多继承,那么其寻找的方式就有两种,一个是深度有限,一个是广度优先。
而这两种方式分别是新式类与旧式类的查找父类的方式,新式类使用的广度优先遍历,旧式类使用的是深度优先遍历。