2024年Python最新python自测100题_q62,开发面试题库

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在大多数情况下,xrange和range在功能方面完全相同,它们都提供了一种生成整数列表的方法。唯一的区别是range返回一个Python列表对象,x range返回一个xrange对象。

Q34.Python中的“按值调用”是什么?

在call-by-value中,表达式或值是否绑定到函数中的相应变量的参数。Python会将该变量视为函数级范围中的本地变量。对该变量所做的任何更改都将保留在本地,并且不会反映在该函数之外。

Q35.什么是Python中的“按引用调用”?

我们可以互换地使用“引用调用”和“引用传递”。当我们通过引用传递参数时,它可以作为函数的隐式引用,而不是简单的副本。在这种情况下,对参数的任何修改也将对调用者可见。

该方案还具有带来更多时间和空间效率的优点,因为它留下了创建本地副本的需要。相反,缺点可能是函数调用期间变量可能会意外更改。

Q36.Lambda和Def之间的主要区别是什么?

当lambda是uni-expression函数时,Def可以包含多个表达式。Def生成一个函数并指定一个名称以便稍后调用它。Lambda形成一个函数对象并返回。Def可以有一个return语句。Lambda不能有return语句。Lambda支持在列表和字典中使用。

Q37.ascii、unicode、utf-8、gbk 区别?

ASCII码:使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符;

Unicode:能够表示全世界所有的字节;

GBK:是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码;

UTF-8:是一种针对Unicode的可变长度字符编码,又称万国码。

Q38.每当Python退出时,为什么不是所有的内存都被解除分配?

每当python退出时,尤其是那些对其他对象具有循环引用的Python模块或者从全局名称空间引用的对象并不总是被解除分配或释放。由于python拥有自己的高效清理机制,无法解除分配保留的那些内存部分会在退出时尝试取消分配/销毁其他所有对象。

Q 39.解释Python的参数传递机制

Python使用按引用传递(pass-by-reference)将参数传递到函数中。如果你改变一个函数内的参数,会影响到函数的调用。这是Python的默认操作。不过,如果我们传递字面参数,比如字符串、数字或元组,它们是按值传递,这是因为它们是不可变的。

Q40.什么是猴子补丁?

在运行期间动态修改一个类或模块。

class A:

def func(self):

print(“Hi”)

def monkey(self):

print “Hi, monkey”

m.A.func = monkey

a = m.A()

a.func()

Hi, Monkey

Q41.大数据的文件读取

1)利用生成器generator

2)迭代器进行迭代遍历:for line in file

Q42.find和grep

grep命令是一种强大的文本搜索工具,grep搜索内容串可以是正则表达式,允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。find通常用来再特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。

Q43.线上服务可能因为种种原因导致挂掉怎么办?

linux下的后台进程管理利器 supervisor

每次文件修改后再linux执行 service supervisord restart

Q44.如何提高python的运行效率

使用生成器;关键代码使用外部功能包(Cython,pylnlne,pypy,pyrex);针对循环的优化–尽量避免在循环中访问变量的属性

Q45.常用Linux命令

ls,help,cd,more,clear,mkdir,pwd,rm,grep,find,mv,su,date

Q46.Python中的yield用法

yield简单说来就是一个生成器,这样函数它记住上次返 回时在函数体中的位置。对生成器第 二次(或n 次)调用跳转至该函 次)调用跳转至该函数。

Q47.描述数组、链表、队列、堆栈的区别?

数组与链表是数据存储方式的概念,数组在连续的空间中存储数据,而链表可以在非连续的空间中存储数据;队列和堆栈是描述数据存取方式的概念,队列是先进先出,而堆栈是后进先出;队列和堆栈可以用数组来实现,也可以用链表实现。

Q48.如何使用我已经知道的URL地址本地保存图像?

将使用以下代码从URL地址本地保存图像:

import urllib.request

urllib.request.urlretrieve(“URL”, “local-filename.jpg”)

Q49.如何获取任何网址或网页的Google缓存时限?

使用以下URL格式:

http://webcache.googleusercontent.com/search?q=cache:URLGOESHERE请务必将“URLGOESHERE”替换为您要检索其缓存的页面或网站的正确网址,并查看时间。

例如,要查看http://edureka.co的Google Webcache时代,您需要使用以下网址:

http://webcache.googleusercontent.com/search?q=cache:edureka.co

Q50.您需要从IMDb前250电影页面中删除数据,只有字段电影名称,年份和评级

from bs4 import BeautifulSoup

import requests

import sys

url =‘http://www.imdb.com/chart/top’

response =requests.get(url)

soup =BeautifulSoup(response.text)

tr =soup.findChildren(“tr”)

tr =iter(tr)

next(tr)

formovie intr:

title =movie.find(‘td’, {‘class’: ‘titleColumn’} ).find(‘a’).contents[0]

year =movie.find(‘td’, {‘class’: ‘titleColumn’} ).find(‘span’, {‘class’: ‘secondaryInfo’}).contents[0]

rating =movie.find(‘td’, {‘class’: ‘ratingColumn imdbRating’} ).find(‘strong’).contents[0]

row =title +’ - ‘+year +’ ‘+’ '+rating

print(row)

上述代码将有助于从IMDb的前250名列表中删除数据。

Q51.请解释使用*args和*kwargs的含义

当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args:

def func(*args):

for i in args:

print(i)

func(3,2,1,4,7)

3

2

1

4

7

在我们不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数:

def func(**kwargs):

for i in kwargs:

print(i,kwargs[i])

func(a=1,b=2,c=7)

a.1

b.2

c.7

Q52.如何在Python中删除文件?

使用命令os.remove(filename)或os.unlink(filename)

Q53.解释如何从C访问用Python编写的模块?

您可以通过以下方法访问C中用Python编写的模块:

Module = = PyImport_ImportModule(“”)

Q54.在Python中使用//运算符?

它是一个Floor Divisionoperator,用于分割两个操作数,结果为商,只显示小数点前的数字。例如,10 // 5 = 2和10.0 // 5.0 = 2.0。

Q55.怎么移除一个字符串中的前导空格?

字符串中的前导空格就是出现在字符串中第一个非空格字符前的空格。我们使用方法Istrip()可以将它从字符串中移除。

’  Data123  '.lstrip()

结果:

'Data123 ’

最初的字符串当中既有前导字符也有后缀字符,调用Istrip()去除了前导空格,如果我们想去除后缀空格,可以使用rstrip()方法。

'Data123    '.rstrip()

‘Data123’

Q56.如何用Python输出一个Fibonacci数列?

a,b = 0, 1

while b<100:

print (b)

a, b = b, a+b

Q57.在Python中怎样将字符串转换为整型变量?

如果字符串只含有数字字符,可以用函数int()将其转换为整数。

int(‘22’)

我们检查一下变量类型:

type(‘22’)

<class’str’>

type(int(‘22’))

<class’int’>

Q58.在Python中如何生成一个随机数?

要想生成随机数,我们可以从random模块中导入函数random()。

from random import random

random()

0.013501571090371978

我们还可以使用函数randint(),它会用两个参数表示一个区间,返回该区间内的一个随机整数。

from random import randint

randint(2,7)

4

Q59.怎样将字符串中第一个字母大写?

最简单的方法就是用capitalize()方法。

‘daxie’.capitalize()

‘Daxie’

Q60.如何检查字符串中所有的字符都为字母数字?

对于这个问题,我们可以使用isalnum()方法。

‘DATA123’.isalnum()

True

‘DATA123!’.isalnum()

False

我们还可以用其它一些方法:

‘123’.isdigit()#检测字符串是否只由数字组成

True

‘123’.isnumeric()#只针对unicode对象

True

‘data’.islower()#是否都为小写

True

‘Data’.isupper()#是否都为大写

False

Q61.什么是Python中的连接(concatenation)?

Python中的连接就是将两个序列连在一起,我们使用+运算符完成:

‘22’+‘33’

‘2233’

[1,2,3]+[4,5,6]

[1, 2,3, 4, 5, 6]

(2,3)+(4)

TypeError  Traceback (most recent call last)

in

----> 1 (2,3)+(4)

TypeError: can only concatenate tuple (not “int”) to tuple

这里运行出错,因为(4)被看作是一个整数,修改一下再重新运行:

(2,3)+(4,)

(2, 3,4)

Q62.什么是递归?

在调用一个函数的过程中,直接或间接地调用了函数本身这个就叫递归。但为了避免出现死循环,必须要有一个结束条件,举个例子:

def facto(n):

if n==1: return 1

return n*facto(n-1)

facto(5)

120

Q63.什么是生成器?

生成器会生成一系列的值用于迭代,这样看它又是一种可迭代对象。它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。我们定义一个能逐个“yield”值的函数,然后用一个for循环来迭代它。

def squares(n):

i=1

while(i<=n):

yield i**2

i+=1

for i in squares(5):

print(i)

1

4

9

16

25

Q64.什么是迭代器?

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。我们使用inter()函数创建迭代器。

odds=iter([1,2,3,4,5])

#每次想获取一个对象时,我们就调用next()函数

next (odds)

1

next (odds)

2

next (odds)

3

next (odds)

4

next (odds)

5

Q65.请说说生成器和迭代器之间的区别

1)在使用生成器时,我们创建一个函数;在使用迭代器时,我们使用内置函数iter()和next();

2)在生成器中,我们使用关键字‘yield’来每次生成/返回一个对象;

3)生成器中有多少‘yield’语句,你可以自定义;

4)每次‘yield’暂停循环时,生成器会保存本地变量的状态。而迭代器并不会使用局部变量,它只需要一个可迭代对象进行迭代;

5)使用类可以实现你自己的迭代器,但无法实现生成器;

6)生成器运行速度快,语法简洁,更简单;

7)迭代器更能节约内存。

Q66.函数zip()的是干嘛的?

Python新手可能对这个函数不是很熟悉,zip()可以返回元组的迭代器。

list(zip([‘a’,‘b’,‘c’],[1,2,3]))

[(‘a’,1), (‘b’, 2), (‘c’, 3)]

在这里zip()函数对两个列表中的数据项进行了配对,并用它们创建了元组。

Q67.如何用Python找出你目前在哪个目录?

我们可以使用函数/方法getcwd(),从模块os中将其导入。

import os

os.getcwd()

‘C:\Users\37410\Desktop\代码’

Q68.如何计算一个字符串的长度?

这个也比较简单,在我们想计算长度的字符串上调用函数len()即可。

len(‘Data 123’)

8

Q69.如何从列表中删除最后一个对象?

从列表中删除并返回最后一个对象或obj。

list.pop(obj = list [-1])

Q70.解释一些在Python中实现面向功能的编程的方法

有时,当我们想要遍历列表时,一些方法会派上用场。

1)filter()

过滤器允许我们根据条件逻辑过滤一些值。

list(filter(lambda x:x> 5,range(8)))

[6,7]

2)map()

Map将函数应用于iterable中的每个元素。

list(map(lambda x:x ** 2,range(8)))

[0,1,4,9,16,25,36,49]

3)reduce()

在我们达到单个值之前,Reduce会反复减少序列顺序。

from functools import reduce

reduce(lambda x,y:xy,[1,2,3,4,5])

-13

Q71.编写一个Python程序来计算数字列表的总和

def list_sum(num_List):如果len(num_List)== 1:

return num_List [0]

else:

return num_List [0] + list_sum(num_List [1:])

print(list_sum([3,4,5,6,11]))

29

Q72.编写一个Python程序来读取文件中的随机行

import random

def random_line(fname):

lines = open(fname).read().splitlines()

return random.choice(lines)

print(random_line(‘test.txt’))

Q73.编写一个Python程序来计算文本文件中的行数

def file_lengthy(fname):

open(fname)as f:

for i,l in enumerate(f):

pass

return i + 1

print(“file of lines:”,file_lengthy(“test.txt”))

Q74.请写一个Python逻辑,计算一个文件中的大写字母数量

import os

os.chdir(‘C:\Users\lifei\Desktop’)

with open(‘Today.txt’) as today:

count=0

for i in today.read():

if i.isupper():

count+=1

print(count)

Q75.在Python中为数值数据集编写排序算法

以下代码可用于在Python中对列表进行排序:

list = [“1”, “4”, “0”, “6”, “9”]

list = [int(i) for i in list]

list.sort()

print (list)

Django有关

Q76.请解释或描述一下Django的架构

对于Django框架遵循MVC设计,并且有一个专有名词:MVT,M全拼为Model,与MVC中的M功能相同,负责数据处理,内嵌了ORM框架;V全拼为View,与MVC中的C功能相同,接收HttpRequest,业务处理,返回HttpResponse;T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html,内嵌了模板引擎

Q77.Django,Pyramid和Flask之间的差异

Flask是一个“微框架”,主要用于具有更简单要求的小型应用程序。Pyramid适用于大型应用程序,具有灵活性,允许开发人员为他们的项目使用数据库,URL结构,模板样式等正确的工具。Django也可以像Pyramid一样用于更大的应用程序。它包括一个ORM。

Q78.讨论Django架构

Django架构

开发人员提供模型,视图和模板,然后将其映射到URL,Django可以为用户提供服务。

Q79.解释如何在Django中设置数据库

Django使用SQLite作为默认数据库,它将数据作为单个文件存储在文件系统中。

如过你有数据库服务器-PostgreSQL,MySQL,Oracle,MSSQL-并且想要使用它而不是SQLite,那么使用数据库的管理工具为你的Django项目创建一个新的数据库。

无论哪种方式,在您的(空)数据库到位的情况下,剩下的就是告诉Django如何使用它。这是项目的settings.py文件的来源。

我们将以下代码行添加到setting.py文件中:

DATABASES ={‘default’: {‘ENGINE’: ‘django.db.backends.sqlite3’, ‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),

Q80.举例说明如何在Django中编写VIEW?

这是我们在Django中使用write一个视图的方法:

from django.http import HttpResponse

import datetime

def Current_datetime(request):

now =datetime.datetime.now()

html =“It is now %s”%now

return HttpResponse(html)

返回当前日期和时间,作为HTML文档。

Q81.提到Django模板的组成部分。

模板是一个简单的文本文件。它可以创建任何基于文本的格式,如XML,CSV,HTML等。模板包含在评估模板时替换为值的变量和控制模板逻辑的标记(%tag%)。

Q82.在Django框架中解释会话的使用?

Django提供的会话允许您基于每个站点访问者存储和检索数据。Django通过在客户端放置会话ID cookie并在服务器端存储所有相关数据来抽象发送和接收cookie的过程。

所以数据本身并不存储在客户端。从安全角度来看,这很好。

Q83.列出Django中的继承样式

在Django中,有三种可能的继承样式:

抽象基类:当你只希望父类包含而你不想为每个子模型键入的信息时使用;

多表继承:对现有模型进行子类化,并且需要每个模型都有自己的数据库表。

代理模型:只想修改模型的Python级别行为,而无需更改模型的字段。

数据分析

Q84.什么是Python中的map函数?

map函数执行作为第一个参数给出的函数,该函数作为第二个参数给出的iterable的所有元素。如果给定的函数接受多于1个参数,则给出了许多迭代。

Q85.如何在NumPy数组中获得N个最大值的索引?

我们可以使用下面的代码在NumPy数组中获得N个最大值的索引:

importnumpy as np

arr =np.array([1, 3, 2, 4, 5])

print(arr.argsort()[-3:][::-1])

4 3 1

Q86.如何用Python/ NumPy计算百分位数?

importnumpy as np

a =np.array([1,2,3,4,5]

p =np.percentile(a, 50) #Returns 50th percentile, e.g. median

print§

3

Q87.NumPy阵列在(嵌套)Python列表中提供了哪些优势?

1)Python的列表是高效的通用容器。

它们支持(相当)有效的插入,删除,追加和连接,Python的列表推导使它们易于构造和操作。

2)有一定的局限性

它们不支持元素化加法和乘法等“向量化”操作,可以包含不同类型的对象这一事实意味着Python必须存储每个元素的类型信息,并且必须在操作时执行类型调度代码在每个元素上。

3)NumPy不仅效率更高,也更方便

你可以获得大量的矢量和矩阵运算,这有时可以避免不必要的工作。

4)NumPy数组更快

你可以使用NumPy,FFT,卷积,快速搜索,基本统计,线性代数,直方图等内置。

Q88.解释装饰器的用法

Python中的装饰器用于修改或注入函数或类中的代码。使用装饰器,您可以包装类或函数方法调用,以便在执行原始代码之前或之后执行一段代码。装饰器可用于检查权限,修改或跟踪传递给方法的参数,将调用记录到特定方法等

Q89.NumPy和SciPy有什么区别?

1)在理想的世界中,NumPy只包含数组数据类型和最基本的操作:索引,排序,重新整形,基本元素函数等。

2)所有数字代码都将驻留在SciPy中。然而,NumPy的一个重要目标是兼容性,因此NumPy试图保留其前任任何一个支持的所有功能。

3)因此,NumPy包含一些线性代数函数,即使它们更恰当地属于SciPy。无论如何,SciPy包含更多全功能的线性代数模块版本,以及许多其他数值算法。

4)如果你使用python进行科学计算,你应该安装NumPy和SciPy。大多数新功能属于SciPy而非NumPy。

Q90.如何使用NumPy / SciPy制作3D绘图/可视化?

与2D绘图一样,3D图形超出了NumPy和SciPy的范围,但就像2D情况一样,存在与NumPy集成的包。Matplotlib在mplot3d子包中提供基本的3D绘图,而Mayavi使用功能强大的VTK引擎提供各种高质量的3D可视化功能。

爬虫和scary框架

Q91.scrapy和scrapy-redis有什么区别?为什么选择redis数据库?

  1. scrapy是一个Python爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值