美文网首页码农的世界
这篇文章没白看,这些python面试题,这些都让我成长了!

这篇文章没白看,这些python面试题,这些都让我成长了!

作者: b4a0155c6514 | 来源:发表于2019-01-10 15:40 被阅读1次
    这篇文章没白看,这些python面试题,这些都让我成长了!

    前言

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

    一、题目部分

    这篇文章没白看,这些python面试题,这些都让我成长了!

    1、python中常用的数据结构有哪些?请简要介绍一下。

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

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

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

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

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

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

    8、

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

    a=['apple', 'banana', 'apple', 'tomato', 'orange', 'apple', 'banana', 'watermeton']

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

    alist=[{"name":"a", "age":20}, {"name":"b", "age":30}, {"name":"c", "age":25}] 将alist中的元素按照age从小到大排序。

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1a = 1
    2def fun(a):
    3 a = 2
    4fun(a)
    5print(a)
    1a = []
    2def fun(a):
    3 a.append(1)
    4fun(a)
    5print(a)
    1class Person:
    2 name = 'Lily'
    3
    4p1 = Person()
    5p2 = Person()
    6p1.name = 'Bob'
    7print(p1.name)
    8print(p2.name)
    9print(Person.name)
    </pre>

    二、解答部分

    注:以下答案,均为google后结合自己学所知识回答,可能会有不正确的地方,错误之处希望大家帮我指正出来,谢谢。

    1、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中单引号、双引号、三引号的区别。

    首先,单引号和双引号在使用时基本上没有什么区别,唯一需要注意的是:当字符串中有单引号时,最好在外面使用双引号;当有双引号时,最好在外面使用单引号。

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1print('''i
    2love
    3you''') #特殊功能,可以直接打印多行内容,而前面两种情况需要显示输入
    才能换行
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1i
    2love
    3you
    </pre>

    而单引号和双引号如果想要实现上面的效果,需要加上换行符。

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1print('i
    love
    you')
    </pre>

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

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

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

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

    所以,根据定义可以知道,在函数内部是无法定义一个全局变量的,只能做到修改已经定义的全局变量。

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

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

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1a = ['1', '2'] # a是一个可变对象
    2b = a
    3a = a.pop()
    4print(b) # 修改了a,b也跟着变
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1['1']
    </pre>

    当a为不可变对象时:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1a = 1
    2b = a
    3a = 2
    4print('b = {}'.format(b))
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">11 b = 1
    </pre>

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1a = {1: [1, 2, 3]}
    2b = a.copy()
    3print(a, b)
    4a[1].append(4)
    5print(a, b)
    </pre>

    输出结果为:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1{1: [1, 2, 3]} {1: [1, 2, 3]}
    2{1: [1, 2, 3, 4]} {1: [1, 2, 3, 4]}
    </pre>

    当a为不可变对象时:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1import copy
    2a = 'TEST_STRING'
    3b = copy.copy(a)
    4print(a, b)
    5a = a.lower()
    6print(a, b)
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1TEST_STRING TEST_STRING
    2test_string TEST_STRING
    </pre>

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1import copy
    2a = {1: [1, 2, 3]}
    3b = copy.deepcopy(a)
    4print(a, b)
    5a[1].append(4)
    6print(a, b)
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">11 {1: [1, 2, 3]} {1: [1, 2, 3]}
    22 {1: [1, 2, 3, 4]} {1: [1, 2, 3]}
    </pre>

    当a为不可变对象时:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1import copy
    2a = 'TEST_STRING'
    3b = copy.deepcopy(a)
    4print(a, b)
    5a = a.lower()
    6print(a, b)
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1TEST_STRING TEST_STRING
    2test_string TEST_STRING
    </pre>

    下面是图解:

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

    这篇文章没白看,这些python面试题,这些都让我成长了!

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

    这篇文章没白看,这些python面试题,这些都让我成长了!

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

    这篇文章没白看,这些python面试题,这些都让我成长了!

    总结:

    (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)。

    这篇文章没白看,这些python面试题,这些都让我成长了!

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

    两种方法:

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

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

    方法一:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1a = [1, 2, 3, 4, 5, 2, 3]
    2
    3def fun1(a):
    4 a = list(set(a))
    5 print(a)
    6
    7fun1(a)
    </pre>

    方法二:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1a = [1, 2, 3, 4, 5, 2, 3]
    2
    3def fun1(a):
    4 b = {}
    5 b = b.fromkeys(a)
    6 c = list(b.keys())
    7 print(c)
    8
    9c = fun1(a)
    </pre>

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

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

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1def import_args(test, *args):
    2 print('param1', test)
    3 for item in args:
    4 print('other param', item)
    5
    6
    7import_args('123', 'hello', '2019')
    </pre>

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

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1def import_args(test, *args):
    2 print('param1', test)
    3 for item in args:
    4 print('other param', item)
    5
    6
    7args = ['hello', '2019']
    8import_args('123', *args)
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1param1 123
    2other param hello
    3other param 2019
    </pre>

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

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

    接下来说说**kwargs。

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1def import_kwargs(test, **kwargs):
    2 print('param1', test)
    3 for key, value in kwargs.items():
    4 print(key, value)
    5
    6
    7d = {'name': 'jack', 'age': 26}
    8import_kwargs('123', **d)
    </pre>

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

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1param1 123
    2name jack
    3age 26
    </pre>

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

    8、

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

    a=['apple', 'banana', 'apple', 'tomato', 'orange', 'apple', 'banana', 'watermeton']

    方法一:

    利用字典。

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1a = ['apple', 'banana', 'apple', 'tomato', 'orange', 'apple', 'banana', 'watermeton']
    2dic = {}
    3for key in a:
    4 dic[key] = dic.get(key, 0) + 1
    5print(dic)
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1{'apple': 3, 'banana': 2, 'tomato': 1, 'orange': 1, 'watermeton': 1}
    </pre>

    方法二:

    利用python的collections包。

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1from collections import Counter
    2
    3a = ['apple', 'banana', 'apple', 'tomato', 'orange', 'apple', 'banana', 'watermeton']
    4d = Counter(a)
    5print(d)
    </pre>

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1Counter({'apple': 3, 'banana': 2, 'tomato': 1, 'orange': 1, 'watermeton': 1}) # 是一个类似字典的结构
    </pre>

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

    alist=[{"name":"a", "age":20}, {"name":"b", "age":30}, {"name":"c", "age":25}] 将alist中的元素按照age从小到大排序。

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1alist = [{"name": "a", "age": 20}, {"name": "b", "age": 30}, {"name": "c", "age": 25}]
    2alist.sort(key=lambda x: x['age'])
    3print(alist)
    </pre>

    这是一种效率很高的排序方法。

    输出结果:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1[{'name': 'a', 'age': 20}, {'name': 'c', 'age': 25}, {'name': 'b', 'age': 30}]
    </pre>

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

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

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

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

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

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

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

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1Bob
    2Lily
    3Lily
    </pre>

    以上。

    相关文章

      网友评论

        本文标题:这篇文章没白看,这些python面试题,这些都让我成长了!

        本文链接:https://www.haomeiwen.com/subject/xcearqtx.html