前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:qiaoziheng

一、题目部分
1、python中常用的数据结构有哪些?请简要介绍一下。如果你还不是很清楚,建议可以先去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,多跟里面的人交流,进步更快哦!

python中常见的数据结构有:列表(list),字典(dict),元组(tuple),字符串(string),集合(set),数字(int或long或float。。。)等。

其中,列表,元祖和字符串可以统一归为序列类,即这三种数据结构中的元素是有序的。比如,他们都有索引(下标)操作,还有切片、相加和长度(len),最大值(max),最小值(min)操作。这是他们的共同点。

补充:python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。

另外,关于这个问题,面试官很容易引出另一个问题:python中的哪些数据类型是可变的,哪些是不可变的?

首先,可变/不可变是针对该对象所指向的内存中的值是否可变来判断的。如可变类型的数据类型有列表和字典,还有集合不可变类型的数据类型有字符串,元组,数字。

就举个最简单的数字的例子,python中有小整数池的概念,即[-5,256]范围内的整数,python解释器对他们做了特殊处理,都放在内存中的固定位置,不会因为你的操作二发生变化。

现在:a = 1 ,然后我们又重新对a赋值,a = 2,在重新赋值的过程中,整数1所对应的内存地址没有和数字的大小都没有发生变化,还在内存中的固定位置。整数2也是如此。变化的是a的指针(这里引用C中的概念)从指向数字1变成数字2。a对象指向的内存中的值没有发生变化,因此数字是不可变类型的数据类型。字符串,集合也是同理。

2、简要描述python中单引号、双引号、三引号的区别。

首先,单引号和双引号在使用时基本上没有什么区别;

唯一需要注意的是:

当字符串中有单引号时,最好在外面使用双引号;

当有双引号时,最好在外面使用单引号。

三引号一般不常用,除了用来做注释之外,还可以用来打印多行字符串。特殊用途,是可以打印多行字符串。

3、如何在一个function里设置一个全局的变量。

先说概念,全局变量是指定义在函数外部的变量。全局变量的作用域为全局。

局部变量是指定义在函数内部的变量。局部变量的作用域为函数内,除了函数就无效了。

这里举个例子,如果把函数比作国家,那么全局就是全球,全局变量好比是阿拉伯数字,每个国家都认识。

4、python里面如何拷贝一个对象?(赋值、浅拷贝、深拷贝的区别)

在python中如何拷贝一个对象是需要根据具体的需求来定的。

(1)赋值:其实就是对象的引用。相当于C的指针,修改了其中一个对象,另一个跟着改变。注意对于不可变对象而言,如果修改了其中一个对象,就相当于修改它的指针指向,另一个对象是不会跟着变化的。

(2)浅拷贝:拷贝父对象,但是不会拷贝父对象的子对象。(具体的方法有:b = copy.copy(a),切片如b = a[1:4])

(3)深拷贝:完全拷贝了父对象和子对象(具体的方法有:b = copy.deepcopy(a))

下面是图解:

1、b = a: 赋值引用,a 和 b 都指向同一个对象。

2、b = a.copy():浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

3、b = copy.deepcopy(a):深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

总结:

(1)当对象为不可变类型时,不论是赋值,浅拷贝还是深拷贝,那么改变其中一个值时,另一个都是不会跟着变化的。

(2)当对象为可变对象时,如果是赋值和浅拷贝,那么改变其中任意一个值,那么另一个会跟着发生变化的;如果是深拷贝,是不会跟着发生改变的。

5、如果custname字符串的编码格式为uft-8,如何将custname的内容转化为gb18030的字符串?

先将custname编码格式转换为unicode,在转换为gb18030。即custname.decode('utf-8').encode('gb18030')。

注意:unicode编码是一种二进制编码,是转换编码的中间桥梁。比如需要将utf-8转换为gbk,那么就需要先转换为unicode(decode),再转为gbk(encode)。

6、请写出一段python代码实现删除list中的重复元素。

两种方法:

(1)利用字典的fromkeys来自动过滤重复值

(2)利用集合set的特性,元素是非重复的

方法一:

方法二:

7、这两个参数是什么意思?args和 kwargs。

首先,我想说的是*args和**kwargs并不是必须这样写,只有前面的*和**才是必须的。你可以写成*var和**vars。而写成*args和**kwargs只是约定俗称的一个命名规定。

*args和**kwargs主要用于函数定义,你可以将不定量的参数传递给一个函数。其中,*args是用来发送一个非键值对的可变数量的参数列表给一个函数;**kwargs允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用**kwargs。

这里传递了3个参数,按位置传参,'123'为test传参,'hello'和'2019'为*args传参,这里传了2个参数。

注意,看下面的*args的另一种用法:用来解压数据。

这段代码和上面的效果是一样的,但是这里第8行的*args和第1行的*args可是不一样的。第一行是表示函数可以接受不定数量的非键值对的参数,用来传参使用的。第八行是用来解压列表

['hello', '2019']的每一项数据的,用来解压参数的。这是*args的两种用法,也可说是*的两种用法,因为args是可变的。

接下来说说**kwargs。

**kwargs用来传递带键值对的参数,而**也是用来解压字典容器内的参数。

总结:

*args和**kwargs都是用于函数中传递参数的,*args传递的是非键值对的参数,**kwargs传递的是带键值对的参数,如果还有普通参数需要传递,那么应该先传递普通的参数。

8、

(1)统计如下list单词及其出现的次数。

方法一:

利用字典。

方法二:

利用python的collections包。

(2)给列表中的字典排序:例如有如下list对象:

利用list的内建函数,list.sort()来进行排序。

(3)写出下列代码的运行结果

第一段代码的运行结果为:1

分析,在函数外面定义了一个全局变量a为1,在函数内部定义了一个局部变量a为2。局部变量在离开函数后就失效了。

所以,结果为全局变量的a的值。如果在a=2之前加上global a,声明为全局变量,那么结果为2。

第二段代码的运行结果为:[1]

这是因为,将a传入到function中,这相当于对a进行赋值引用。由于a是可变类型的,所以在函数内部修改a的时候,外部的全局变量a也跟着变化。

第三段代码的运行结果为:

Lily

Lily

以上就是本期讲的内容,如果你还有不清楚的,或者平时学习遇到非常问题不知道怎么弄,可以先去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,多跟里面的人交流,进步更快哦!

Python爬虫基础面试题,为2020年初就业做准备的更多相关文章

  1. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  2. python爬虫-基础入门-python爬虫突破封锁

    python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...

  3. python爬虫-基础入门-爬取整个网站《3》

    python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python ...

  4. python爬虫-基础入门-爬取整个网站《2》

    python爬虫-基础入门-爬取整个网站<2> 描述: 开场白已在<python爬虫-基础入门-爬取整个网站<1>>中描述过了,这里不在描述,只附上 python3 ...

  5. python爬虫-基础入门-爬取整个网站《1》

    python爬虫-基础入门-爬取整个网站<1> 描述: 使用环境:python2.7.15 ,开发工具:pycharm,现爬取一个网站页面(http://www.baidu.com)所有数 ...

  6. python爬虫常见面试题(二)

    前言 之所以在这里写下python爬虫常见面试题及解答,一是用作笔记,方便日后回忆:二是给自己一个和大家交流的机会,互相学习.进步,希望不正之处大家能给予指正:三是我也是互联网寒潮下岗的那批人之一,为 ...

  7. python爬虫常见面试题(一)

    前言 之所以在这里写下python爬虫常见面试题及解答,一是用作笔记,方便日后回忆:二是给自己一个和大家交流的机会,互相学习.进步,希望不正之处大家能给予指正:三是我也是互联网寒潮下岗的那批人之一,为 ...

  8. Python爬虫基础之认识爬虫

    一.前言 爬虫Spider什么的,老早就听别人说过,感觉挺高大上的东西,爬网页,爬链接~~~dos黑屏的数据刷刷刷不断地往上冒,看着就爽,漂亮的校花照片,音乐网站的歌曲,笑话.段子应有尽有,全部都过来 ...

  9. python 爬虫基础知识一

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 网络爬虫必备知识点 1. Python基础知识2. P ...

随机推荐

  1. System.out.printf使用以及注意点

    一.System.out.printf格式化输出 1.常用控制符 控制符 说明 %d 按十进制整型数据的实际长度输出. %ld 输出长整型数据. %md m 为指定的输出字段的宽度.如果数据的位数小于 ...

  2. supersocket/SocketEngin/BootstrapFactory.cs 详解

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using SuperSoc ...

  3. android java socket断线重连

    android java socket断线重连 thread = new Thread(new Runnable() { @Override public void run() { while (tr ...

  4. linux下svn服务器端的操作

    1.停止svn服务器端: [root@ www]# ps -ef|grep svnroot 21698 1 0 09:55 ? 00:00:00 svnserve -d -r /www/svn/roo ...

  5. .Net Core3.1下使用Swagger搭建web api项目

    前言:微软于前天发布.net core 3.1正式版,并将长期支持3.1.所以我听到这个消息后就急忙下载.net core 3.1的SDK和Runtime,应该是公司最先用3.1的攻城狮了

  6. Ubuntu18.04下搭建LNMP教程-超详细图文(Nginx+MySQL+PHP含各种解决报错问题)

     笔者最近在VM15.0上安装了Ubuntu18.,先来安装一个LNMP(Nginx+MySQL+PHP)网站服务器架构,为后续的实验做准备~    LNMP是指一组通常一起使用来运行动态网站或者服务 ...

  7. 实战!轻松搭建图像分类 AI 服务

    人工智能技术(以下称 AI)是人类优秀的发现和创造之一,它代表着至少几十年的未来.在传统的编程中,工程师将自己的想法和业务变成代码,计算机会根据代码设定的逻辑运行.与之不同的是,AI 使计算机有了「属 ...

  8. 机器学习笔记(六) ---- 支持向量机(SVM)

    支持向量机(SVM)可以说是一个完全由数学理论和公式进行应用的一种机器学习算法,在小批量数据分类上准确度高.性能好,在二分类问题上有广泛的应用. 同样是二分类算法,支持向量机和逻辑回归有很多相似性,都 ...

  9. Mybatis的模糊查询以及自动映射

    Mybatis的模糊查询 1.  参数中直接加入%% ? 1 2 3 4 5 6 7 8 9 param.setUsername("%CD%");       param.setP ...

  10. NIO-Channel接口分析

    目录 NIO-Channel源码分析 目录 前言 接口 SCTP协议 UDP协议 TCP协议 文件 总结 相关文献 NIO-Channel源码分析 目录 NIO-概览 NIO-Buffer NIO-C ...