下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

python应用:Python面试重点(基础篇)

作者:往事西风     来源: https://www.cnblogs.com/linglichong/p/12369837.html点击数:567发布时间: 2020-02-28 11:18:12

标签: python编程语言Python语言

大神带你学编程,欢迎选课

第一部分 必答题。1,简述列举了解的编程语言及语言间的区别?Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

Python        解释型语言,代码简洁,易懂
C语言           编译型语言,底层语言
c++            编译型语言,在C语言基础上加了面向对象
java        混合型语言,可拓展性高
Golang        编译型语言,强类型,代码规范,高并发

语言特点: 灵活简洁,语言优美 可读性强,

语言类型:
     解释型:逐行转化,运行效率低,性能差,开发效率高。兼容性好,跨平台
     编译型 :一次性编译成二进制文件,执行效率高,兼容性差,
     动态语言:不用声明变量的数据类型(脚本类语言)
     静态语言:需要声明变量的数据类型

第三方库:python定位是任其发展,开源库很多,应用领域广
 

2,列举Python2和Python3的区别?

python2只更新支持到2020年
print:2不加括号,3加括号
input:2中用户输入解析为int类型,raw_input为字符串类型,3直接是字符串类型
range:2是列表,xrange是可迭代对象;3是可迭代对象
继承关系:2是新式类+经典类;3是新式类
数字表示:2,int和long(长整形,超出2**63-1,数字末尾有一个L);3所有整型都是int

3,看代码写结果

v1 = 1 or 2

v2 = 3 and 3 or 9 and 0
# v1 = 1
# v2 = 7
 

4,以下的值有什么不同?

 
v1 = [1,2,3]
v2 = [(1),(2),(3)]
v3 = [(1,),(2,),(3,)]

"""
# 逗号才是区分是否是元组的标识符
v1 = [1,2,3] # 列表[int , int , int]
v2 = [(89),(2.12),("abc")] # [int , float , str]
v3 = [(1,),(2,),(3,)] # [tuple,tuple,tuple,tuple]
res = () # 表达空元组
"""
 

5,用一行代码实现数值交换。

 
a = 1
b = 2


a,b = b,a
# 通用
tmp = a
a = b
b = tmp
 

6,Python中单引号、双引号、三引号的区别?

单双引号没有区别,三引号可以支持跨行
在互相嵌套时需注意:里外不能使用相同的引号

7,is和==的区别?

is 是判断内存地址是否一致
== 是判断两个对象的值是否相等

8,python里如何实现tuple和list的转化?

list(数据) tuple(数据)

9,如何实现字符串 st='爱吃大西瓜'的反转?

st = st[::-1]

10,两个set如何获取交集、并集、差集?

 
交集 &
intersection
差集 -
difference
并集 |
union
对称差集 ^
symmetric_difference
在您开始之前,在你的计算机将需要Python,但您可能不需要下载它。首先检查(在同级目录下在命令行窗口输入python)有没有安装Python。如果你看到了一个Python解释器的响应,那么就能在它的显示窗口中得到一个版本号。通常的版本都可以做到Python的向前兼容。
 

11,那些情况下, y != x - (x-y)会成立?

非空集合且不为子父关系的两个集合

12,Python中如何拷贝一个对象?

# copy模块
[:]
import copy
copy.copy()    # 浅拷贝
copy.deepcopy() # 深拷贝

13,简述 赋值、浅拷贝、深拷贝的区别?

赋值:将变量和值在内存中形成映射指向关系
浅拷贝:只拷贝第一层元素地址copy.copy
深拷贝:为所有层级的元素都单独开辟新空间 copy.deepcopy() (地址:原不可变数据只是暂时的指向,可变的数据独立开辟新空间)

可变数据: list set dict
不可变数据: int float bool complex str tuple

14,pass的作用?

pass  占位符  与  ...的用法一样

15,阅读代码写结果:

 
import copy
a = [1,2,4,5,['b','c']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('d')
print(b)
# [1,2,4,5,['b','c','d'],5]
print(c)
# [1,2,4,5,['b','c','d']]
print(a)
# [1,2,4,5,['b','c','d'],5]
 

16,用Python实现9 * 9 乘法表。

 
# while
i = 1
while i<=9:
    # 这个位置写代码
    j = 1
    while j<= i:
        # "谁"*"谁"="谁"
        print("%d*%d=%2d" % (i,j,i*j),end=" ")
        j+=1
        
    # 打印换行
    print()    
    i+=1

# for
for i in range(1, 10):
    for x in range(1, i + 1):
        print(f"{i} * {x} = {i * x}",end=" ")
    print("")
 

17,用Python显示一个斐波那契数列。

 
# 1 1 2 3 5 8 13 21 ...
# 方法一
lst = [1,1]
for i in range(10):
    lst.append(lst[-1] + lst[-2])
print(lst)

# 方法二
a,b = 0,1
for i in range(10):
    print(b)
    a,b = b,a+b

# 方法三
def fib(n):
    if n <= 2:
        return 1
    # 上一个值 + 上上个值
    return fib(n-1) + fib(n-2)

print(fib(6))
 

18,如何删除列表中重复的值?

list(set(list))

19,一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?

 
with open(r'etl_log.txt','r',enconding='utf-8') as f:
    for i in f:
        info = f.readlines()
        print(info)

fp = open("文件名","模式","编码集")
"""
fp 是迭代器
from collections import Iterator,Iterable

# 在遍历fp时,文件按照一行一行进行读取;
for i in fp:
    code ... 

"""
 

20,a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?

a为字典
 

21,lambda关键字的作用?

lambda 匿名函数 : 用一句话表达只有返回值的无名函数
lambda 参数 : 返回值

22,*arg和**kwarg作用?

*args 接收多余的位置参数
**kwargs 接收多余的关键字参数

23,如何在函数中设置一个全局变量 ?

 
global  有该全局变量,修改当前变量,没有改全局变量,定义一个全局变量;    
"""
def func():
    global a
    a = 90
func()
print(a)
"""
 

24,filter、map、reduce的作用?

 
三目(元)运算符  True   if 条件表达式 else False

filter => 过滤数据
iterable : 可迭代对象(range ,容器类型数据 , 迭代器)
filter(func,iterable)  => 返回迭代器

lst = [1,2,3,4,5]
it = filter(lambda x : True   if x % 2 == 0 else False , lst )
print(list(it))
 

25,什么是匿名函数?匿名函数有什么作用?

lambda 匿名函数 : 用一句话表达只有返回值的无名函数
lambda 参数 : 返回值

26,Python递归的最大层数?

官方:1000
实测:994 ~ 1000

import sys
sys.setrecursionlimit(999999) # 修改递归的最大深度,mac能达到30000

27,什么是迭代器?什么是可迭代对象?

迭代器:具有__iter__()和__next__()方法
可迭代对象:具有__iter__()方法


dir(数据) 可以查看该数据的内部系统成员
可迭代对象 => 迭代器  把不能直接被next获取 => 可直接获取到该数据的一个过程

28,什么是生成器?

生成器的本质就是迭代器,可以自定义迭代的逻辑
创建方式两种:
    (1)生成器表达式 (推导式)  (i for i in range(3))
    (2)生成器函数   (含有yield关键字)

29,什么是装饰器及应用场景?

装饰器的本质就是闭包
在不修改原有代码的前提下,额外增加新功能就是装饰器

应用:登录认证,property类,框架(django,flask,@app.route("/",methdos=["GET","POST"]))

30,什么是反射及应用场景?

# 通过字符串去操作类对象 或者 模块中的属性方法

hasattr getattr setattr delattr

应用: 可以配合用户的操作或者输入,调用其中的成员,api接口中

31,写一个普通的装饰器。

 
def wrapper(func):
    def inner(*args,**kwargs):
        res = func(*args,**kwargs)
        print("and you")
        return res
        
    return inner

@wrapper
def func():
    print("i am fine 3q")

func()
 

32,写一个带参数的装饰器。

 
def outer(n):
    def wrapper(func):
        def inner1(*args,**kwargs):
            res = func(*args,**kwargs)
            print("我是大王")
            return res
            
        def inner2(*args,**kwargs):
            res = func(*args,**kwargs)
            print("大王叫我来巡山")
            return res
        
        if n == "alex":
            return inner1
        else:
            return inner2
            
    return wrapper


@outer("alex123") # outer("alex123") => wrapper =>@wrapper
def func():
    print("i am fine 3q")
    
func()
 

33,求结果:

def num():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
[6,6,6,6]
 

34,def(a, b=[])这种写法有什么陷阱?

b身上的默认值是列表,如果使用原来默认的参数,调用func函数
会把几次调用的值都存放在同一个默认列表里
 

35,看代码写结果

 
def func(a,b=[]):
    b.append(a)
    return b
v1 = func(1)
v2 = func(2,[10,20])
v3 = func(3)
print(v1,v2,v3)
 
[1,3],[10,20,2],[1,3]

36,看代码写结果

 
def func(a,b=[]):
    b.append(a)
    return b
v1 = func(1)
print(v1)
v2 = func(2,[10,20])
print(v2)
v3 = func(3)
print(v3)
 
[1]
[10,20,2]
[1,3]

37,请编写一个函数实现将ip地址换成一个整数。

如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
 
# ljust   原字符串居左,填充符号
# rjust   原字符串居右,填充符号
# 方法一
ip = "10.3.9.12"
strvar = ""
for i in ip.split("."):
    bin_str = str(bin(int(i)))[2:]
    # 总长度是8 原字符串居右
    strvar += bin_str.rjust(8,"0")
print(strvar)
    
# 把二进制字符串转换成十进制,默认转换时,是十进制
print(int(strvar,2))

# 方法二
ip = "10.3.9.12"
strvar = ""
for i in ip.split("."):
    # format 将整型转化成二进制,不够8位的拿0补位
    strvar += format(int(i) , "08b")
print(int(strvar,2))
 

38,请查找一个目录下的所有文件(可能存在文件嵌套)。

39,求结果:

import math
print (math.floor(5.5))
5

40,是否使用过functools中的函数?其作用是什么?

from functools import reduce
reduce   累计算

41,re的match和search区别?

match:    从开头进行查找,查找到就停止,找不到返回None
search: 查找全文,找到就停止,找不到就返回None

42,用Python匹配HTML tag的时候,<.*><.*?>有什么区别?

.* 贪婪匹配 匹配多个任意字符
.*? 非贪婪 只匹配一次

43,如何生成一个随机数?

import random

random.random()    # 生成随机小数

44,super的作用?

按照mro的顺序进行继承当前类的下一类

45,双下划线和单下划线的区别?

双线划线:__ 是Python中强制定义为私有
单下划线:_  是程序员约定的私有方法

46,@staticmethod和@classmethod的区别?

47,实现一个单例模式(加锁)。

 
import threading

class Singleton():
    state = None
    lock = threading.RLock()
    
    def __init__(self,name):
        self.name = name
        
    def __new__(cls,*args,**kwargs):
        if cls.state: 
            return cls.state
        with cls.lock:
            if cls.state:
                return cls.state
            cls.state = object.__new__(cls)
        return cls.state
 

48,栈和队列的区别?

栈:先进后出
队列:先进先出

49,一下代码输出是什么?请给出答案并解释。

 
class Parent(object):
    x = 1
class Child1(Parent):
    pass
class Child2(Parent):
    pass
print Parent.x, Child1.x, Child2.x

Child1.x = 2
print Parent.x, Child1.x, Child2.x

Parent.x = 3
print Parent.x, Child1.x, Child2.x
 
"""
1,1,1
两个child都继承了parent,并没有自己的属性或方法


1,2,1
child1添加了属性,就近原则使用自己x的值,child2没有,继承父类


3,2,3
parent和chile1有自己的x方法,就近使用自己的,chiild2没有自己的x,继承父类中的x
"""
 

50,参考下面代码片段:

class Context:
    pass
with Content() as ctx:
    ctx.do_something()
请在Context类下添加代码完成该类的实现

第二部分 可选题

1,如何获取列表中第二大的值?

2,简述Python内存管理机制。

3,简述Python的垃圾回收机制。

4,请用两个队列来实现一个栈。

5,请用Python实现一个链表。

6,请用Python实现链表的逆转。

赞(8)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程