下篇和上篇一样,既有基础知识也有进阶知识,内容涵盖脚本撰写、Python编码和数据结构。搜集整理自编程网站DataFlair技术团队分享的一套Python面试题合集。上篇链接如下:li li:2018年最常见的Python面试题&答案(上)​zhuanlan.zhihu.com

Q1.Python支持什么数据类型?

Python支持5种数据类型:

1.Numbers(数字)--用于保存数值

>>> a=7.0

2.String(字符串)--字符串是一个字符序列。我们用单引号或双引号来声明字符串。

>>> title="Ayushi's Book"

3.Lists(列表)--列表就是一些值的有序集合,而我们用方括号声明列表。

>>> colors=['red','green','blue']

>>> type(colors)

4.Tuples(元组)--元组和列表一样,也是一些值的有序集合,区别是元组是不可变的,意味着我们无法改变元组内的值。

>>> name=('Ayushi','Sharma')

>>> name[0]='Avery'

Traceback (most recent call last):

File "", line 1, in

name[0]='Avery'

TypeError: 'tuple' object does not support item assignment

5.Dictioary(字典)--字典是一种数据结构,含有键值对。我们用大括号声明字典。

>>> squares={1:1,2:4,3:9,4:16,5:25}

>>> type(squares)

>>> type({})

我们还可以使用字典引导式:

>>> squares={x:x**2 for x in range(1,6)}

>>> squares

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Q2.docstring是什么?

Docstring是一种文档字符串,用于解释构造的作用。我们在函数、类或方法中将它放在首位来描述其作用。我们用三个单引号或双引号来声明docstring。

>>> def sayhi():

"""

用该函数打印Hi

"""

print("Hi")

>>> sayhi()

Hi

要想获取一个函数的docstring,我们使用它的_doc_属性。

>>> sayhi.__doc__

'\n 用该函数打印Hi\n '

和注释不同,docstring在运行时会保留下来。

Q3.PYTHONPATH变量是什么?

PYTHONPATH是Python中一个重要的环境变量,用于在导入模块的时候搜索路径。因此它必须包含Python源库目录及含有Pyhton源代码的目录。你可以手动设置PYTHONPATH,但通常Python安装程序会把它呈现出来。

从Q4到Q20都是Python面试基础题,是Python新手面试常出现的问题。

Q4.什么是切片?

切片是Python中的一种方法,能让我们只检索列表、元素或字符串的一部分。在切片时,我们使用切片操作符[]。

>>> (1,2,3,4,5)[2:4]

(3, 4)

>>> [7,6,8,5,9][2:]

[8, 5, 9]

>>> 'Hello'[:-1]

'Hell'

Q5.什么是namedtuple?

Namedtuple能让我们用名称/标签获取一个元组的元素,这里我们使用函数namedtuple(),将其从collections模块中导入。

>>> from collections import namedtuple

>>> result=namedtuple('result','Physics Chemistry Maths') #format

>>> Ayushi=result(Physics=86,Chemistry=95,Maths=86) #declaring the tuple

>>> Ayushi.Chemistry

95

如上所示,它让我们能用对象Ayushi的Chemistry属性获取Chemistry中的成绩。

更多namedtuple知识,参考链接:

Q6.在Python中如何声明一条注释?

和C++等编程语言不同,Python并没有多行注释,只有散列字符(#)。在符号#后的内容都视作注释,解释器会自动将其忽略。

>>> #line 1 of comment

>>> #line 2 of comment

实际上可以在代码任何位置插入注释,用以解释代码。

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

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

>>> int('227')

227

我们检查一下变量类型:

>>> type('227')

>>> type(int('227'))

Q8.在Python中怎样获取输入?

我们用函数input()从用户那里获取输入。在Python 2中,我们还有另一个函数raw_input()。比如input()将文本视为参数值展现出来:

>>> a=input('Enter a number:')

Enter a number:7

>>> type(a)

>>> a*=2

>>> a

'77'

输入数字7,稍加注意会发现它以字符串形式获取输入,将之乘以2,发现也是字符串的操作。那如果需要使用整数呢?使用int()函数。

>>> a=int(input('Enter a number:'))

Enter a number:7

>>> a*=2

>>> a

14

Q9.Python中的不可变集合(frozenset)是什么?

我们举例来回答此类Python面试问题。

首先,我们讨论一下什么是集合。集合就是一系列数据项的合集,不存在任何副本。另外,集合是无序的。

>>> myset={1,3,2,2}

>>> myset

{1, 2, 3}

这就意味着我们无法索引它。

>>> myset[0]

Traceback (most recent call last):

File "", line 1, in

myset[0]

TypeError: 'set' object does not support indexing

不过,集合是可变的。而不可变集合却不可变,这意味着我们无法改变它的值,从而也无法作为字典的键值。

>>> myset=frozenset([1,3,2,2])

>>> myset

frozenset({1, 2, 3})

>>> type(myset)

更多集合的内容,查看链接:

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

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

>>> from random import random

>>> random()

0.7600218483518062

这里我们调用help()函数看一下:

>>> help(random)

Help on built-in function random:

random(...) method of random.Random instance

random() -> x in the interval [0, 1).

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

>>> from random import randint

>>> randint(2,7)

6

>>> randint(2,7)

5

>>> randint(2,7)

2

>>> randint(2,7)

6

>>>

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

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

>>> 'ayushi'.capitalize()

'Ayushi'

>>> type(str.capitalize)

>>> '@yushi'.capitalize()

'@yushi'

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

可以使用isalnum()方法。

>>> 'Ayushi123'.isalnum()

True

>>> 'Ayushi123!'.isalnum()

False

还可以使用其他一些方法:

>>> '123.3'.isdigit() # 检测字符串是否只由数字组成

False

>>> '123'.isnumeric()

True

>>> 'ayushi'.islower()

True

>>> 'ayushi'.isupper()

False

>>> 'Ayushi'.istitle()

True

>>> ' '.isspace()

True

>>> '123F'.isdecimal()

False

isdigit()

True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字

False: 汉字数字

Error: 无

isdecimal()

True: Unicode数字,,全角数字(双字节)

False: 罗马数字,汉字数字

Error: byte数字(单字节)

isnumeric()

True: Unicode数字,全角数字(双字节),罗马数字,汉字数字

False: 无

Error: byte数字(单字节)

================

import unicodedata

unicodedata.digit("2") # 2

unicodedata.decimal("2") # 2

unicodedata.numeric("2") # 2.0

unicodedata.digit("2") # 2

unicodedata.decimal("2") # 2

unicodedata.numeric("2") # 2.0

unicodedata.digit(b"3") # TypeError: must be str, not bytes

unicodedata.decimal(b"3") # TypeError: must be str, not bytes

unicodedata.numeric(b"3") # TypeError: must be str, not bytes

unicodedata.digit("Ⅷ") # ValueError: not a digit

unicodedata.decimal("Ⅷ") # ValueError: not a decimal

unicodedata.numeric("Ⅷ") # 8.0

unicodedata.digit("四") # ValueError: not a digit

unicodedata.decimal("四") # ValueError: not a decimal

unicodedata.numeric("四") # 4.0

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

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

>>> '32'+'32'

'3232'

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

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

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

Traceback (most recent call last):

File "", line 1, in

(2,3)+(4)

TypeError: can only concatenate tuple (not "int") to tuple

只能将元组(不是“整数”)连接到元组。正确连接方法:

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

(2, 3, 4)

>>>

Q14.什么是函数?

当我们想执行一些列语句时,我们可以为其赋予一个名字。我们来定义一个函数,让它取两个数,返回最大的数。

>>> def greater(a,b):

return a if a>b else b

>>> greater(3,3.5)

3.5

除了自己创建函数,也可以使用Python的很多内置函数:

Q15.解释拉姆达表达式,什么时候会用到它?

如果我们需要一个只有单一表达式的函数,我们可以匿名定义它。拉姆达表达式通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

假如我们想将Q14中的函数定义为拉姆达表达式,可以写如下代码:

>>> (lambda a,b:a if a>b else b)(3,3.5)

3.5

这里,a和b都是输入,a if a>b else b就是返回的输出,参数为3和3.5。当然,也有可能没有任何输入。

>>> (lambda : print("Hi"))()

Hi

更多关于拉姆达表达式的内容,参考这里:

Q16.什么是递归?

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

>>> def facto(n):

if n==1:

return 1

return n*facto(n-1)

>>> facto(4)

24

Q17.什么是生成器?

生成器会生成一系列的值用于迭代,这样看它又是一种可迭代对象。它是在for循环过程中不断计算出下一个元素,并在适当的条件结束for循环。

我们定义一个能逐个“yield”值的函数,然后用一个for循环来迭代它。

>>> def squares(n):

i=1

while(i<=n):

yield i**2

i+=1

>>> for i in squares(7):

print(i)

1

4

9

16

25

36

49

关于生成器的深入内容,参考链接:

Q18.什么是迭代器?

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

>>> odds=iter([1,3,5,7,9])

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

>>> next(odds)

1

>>> next(odds)

3

>>> next(odds)

5

>>> next(odds)

7

>>> next(odds)

9

现在我们再调用它,会抛出StopIteration异常。这是因为它已经抵达需要迭代的值的尾部。

>>> next(odds)

Traceback (most recent call last):

File "", line 1, in

next(odds)

StopIteration

更多迭代器的内容,参考链接:

Q19.请说说生成器和迭代器之间的区别在使用生成器时,我们创建一个函数;在使用迭代器时,我们使用内置函数iter()和next()

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

生成器中有多少 ‘yield’语句,你可以自己定义。

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

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

生成器运行速度快,语法简洁,更简单。

迭代器更能节约内存。

关于生成器和迭代器二者的对比,更多内容查看链接:

Q20. 我们都知道现在Python很火,但是对于一门树我们不光要知道它的优点,也要知道它的缺点,请谈谈Python的不足之处。

Python有以下缺陷:Python的可解释特性会拖累其运行速度。

虽然Python在很多方面性能良好,但在移动计算和浏览器方面表现不够好。

由于是动态语言,Python使用鸭子类型,即duck-typing,这会增加运行时错误。

从Q21到Q30都是进阶版Python面试问题,不过Python新手也可以参考。

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

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

>>> list(zip(['a','b','c'],[1,2,3]))

[('a', 1), ('b', 2), ('c', 3)]

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

Q22.如果程序困在了死循环里,怎么打破它?

出现了这种问题时,我们可以按Ctrl+C,这样可以打断执行程序。我们创建一个死循环来解释一下:

>>> def counterfunc(n):

while(n==7):print(n)

>>> counterfunc(7)

7

7

7

7

7

7

7

7

7

7

7

7

7

7Traceback (most recent call last):

File "", line 1, in

counterfunc(7)

File "", line 2, in counterfunc

while(n==7):print(n)

KeyboardInterrupt

>>>

Q23.解释Python的参数传递机制

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

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

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

>>> import os

>>> os.getcwd()

'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36'

>>> type(os.getcwd)

我们还可以用chdir()修改当前工作目录。

>>> os.chdir(r'D:\personal\desktop')

>>> os.getcwd()

'D:\\personal\\desktop'

Q25.怎样发现字符串中u 与‘cake’押韵的第一个字?

我们可以使用函数search(),然后用group()获取输出。

>>> import re

>>> rhyme=re.search('.ake','I would make a cake, but I hate to bake')

>>> rhyme.group()

'make'

我们知道,函数search()会在第一次匹配时停止运行,这样我们就能得到第一个与‘cake’押韵的字。

Q26.如何以相反的顺序展示一个文件的内容?

首先使用os模块中的chdir()函数回到桌面:

>>> import os

>>> os.chdir(r'D:\personal\desktop')

在桌面上创建文件Today.txt,内容如下:

OS, DBMS, DS, ADA

HTML, CSS, jQuery, JavaScript

Python, C++, Java

This sem’s subjects

Debugger

itertools

Container

读取该文件并调用reversed()函数输出:

>>> for line in reversed(list(open('Today.txt'))):

print(line.rstrip())

Container

itertools

Debugger

This sem’s subjects

Python, C++, Java

HTML, CSS, jQuery, JavaScript

OS, DBMS, DS, ADA

>>>

如果没有rstrip(),我们会在输出中得到空行。

Q27.什么是Tkinter?

Tkinter是一款很知名的Python库,用它我们可以制作图形用户界面。其支持不同的GUI工具和窗口构建,比如按钮、标签、文本框等等。这些工具和构件均有不同的属性,比如维度、颜色、字体等。

我们也能导入Tkinter模块。

>>> import tkinter

>>> top=tkinter.Tk()

这会为你创建一个新窗口,然后可以在窗口上添加各个构件。

Q28.请谈谈.pyc和.py文件的不同之处

虽然这两种文件均保存字节代码,但.pyc文件是Python文件的编译版本,它有平台无关的字节代码,因此我们可以在任何支持.pyc格式文件的平台上执行它。Python会自动生成它以优化性能(加载时间,而非运行速度)。

Q29.如何在Python中创建自己的包?

Python中创建包是比较方便的,只需要在当前目录中建立一个文件夹,文件夹中包含一个__init__.py文件和若干个模块文件,其中__init__.py可以是一个空文件,但还是建议将包中所有需要导出的变量放到__all__中,这样可以确保包的接口清晰明了,易于使用。

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

这个比较简单,使用len()函数即可。

>>> len('Ayushi Sharma')

13

参考资料:

python迭代器面试题_2018年最常见的Python面试题答案(下)相关推荐

  1. python错误类型翻译_17个新手常见的Python运行时错误

    原标题:17个新手常见的Python运行时错误 来源 | inventwithPython 翻译 | OSChina.net 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点 ...

  2. win10使用python的strftime有错误_17个常见的Python运行时错误

    作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/88931808 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 对于刚入门的Pyt ...

  3. 【前端面试题】—53道常见NodeJS基础面试题(附答案)

    说到前端就不得不提到后端,我们给用户展示页面所需的数据正是从后端获取的,所以了解后端的运行原理和技术的实现很有必要. Node. js是一个不错的选择,它是基于JavaScript语法的一套服务器端( ...

  4. python迭代器创建序列_第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用...

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  5. java的jquery面试题_10个最常见的JQuery面试题

    (非原创) 毫无疑问,jQuery给了JavaScript急需的提振,这是一门如此有用,但同时总是常常被低估的语言. 在 jQuery 粉墨登场之前,我们曾经会写出冗长的JavaScript代码,不仅 ...

  6. java面试题,各大企业常见的java笔试题之九

    Web 部分:(共题:基础40 道,基础37 道,中等难度3 道) 1.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? [基础] 答:Web 容器加载Servlet 并将其实 ...

  7. python迭代器_Python迭代器

    python迭代器 Good day learners! In our previous tutorial, we learned about Python Operator Overloading. ...

  8. 常见的python与爬虫面试题准备好了

    我们在这里也为正在找工作的同学精心准备了一套面试题,包含python以及爬虫等相关内容.更多python面试题后台发送python面试获取. 一.python常见面试题 1.简述any()和all() ...

  9. python实习生基础面试题_常见的Python基本面试问题,python,基础,面试题

    常见 python 基础面试题 1,文件操作时:xreadlines和readlines的区别? readlines()是把文件的全部内容读取到内存,并解析一个list,当文件的体积很大的时候,需要占 ...

最新文章

  1. C语言逆序字符串数组,【C语言】利用栈将数组中字符串逆序
  2. linux安装VScode
  3. 突然听到一只公鸡的局域网聊天软件
  4. 精益 React 学习指南 (Lean React)- 4.1 react 代码规范
  5. [转] 拆开表皮看心脏:主流网游引擎面面观
  6. 基于16QAM调制的OFDM系统仿真实现
  7. 物体检测中常用的几个概念迁移学习、IOU、NMS理解
  8. PHP中使用 fsockopen curl 模拟异步处理
  9. 校园卡水卡最低成本破解具体过程(补上上次工具教程)By:dj1149 -02
  10. 本地数据库IndexedDB - 初学者
  11. 名帖111 董其昌 小楷《千字文》
  12. 2017年全球大数据产业报告之海外篇(第五集)
  13. win10如何更改计算机用户名,手把手教你win10下怎么修改账户用户名
  14. 想要成为数据分析师 需要具备哪些专业技能?
  15. Linux_终端命令大全
  16. 计算机中文核心期刊和核心期刊影响因子
  17. HTML5实现的经典播放器Winamp
  18. 卸载360超级root
  19. C语言黄金分割法解一元函数,黄金分割法-机械优化设计方案-C语言程序.doc
  20. 完全使用 HTML/CSS 实现的经典扫雷游戏

热门文章

  1. 手把手教你写游戏修改器(终极版)
  2. 重磅 | 产业大咖汇集 见证2017ICT产业多个重要奖项颁布
  3. 单据模板显示公式使用
  4. python 用 xlwings 处理 Excel 中的重复数据
  5. 【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型
  6. 安装python3出现报错信息:configure:error:cannot run C complied programs
  7. GUI图形界面编程基础知识
  8. HTML5期末大作业:家乡网站设计——石家庄(10页) HTML+CSS+JavaScrip 旅游网页html 家乡介绍html网页设计 dw旅游景点网页设计 web课程设计网页规划与设计...
  9. BSN区块链服务网络底十六章
  10. js数组截取方式splice()和slice()方法