万字长文Python面试题,建议先收藏

精心整理的 Python 相关的基础知识,用于面试,或者平时复习,都是很好的!废话不多说,直接开搞

由于文章过长,萝卜哥也贴心的把文章整理成了PDF文档,在文末查看获取方式

基础篇

1. 为什么学习 Python

Python 语言简单易懂,上手容易,随着 AI 风潮,越来越火

2. 解释型和编译型语言的区别

编译型语言:把做好的源程序全部编译成二进制的可运行程序。然后,可直接运行这个程序。如:C,C++ 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!如:Python, (Java 有些特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。)

3. 简述下 Python 中的字符串、列表、元组和字典

字符串(str):字符串是用引号括起来的任意文本,是编程语言中最常用的数据类型

列表(list):列表是有序的集合,可以向其中添加或删除元素

元组(tuple):元组也是有序集合,但是是无法修改的。即元组是不可变的

字典(dict):字典是无序的集合,是由 key-value 组成的

集合(set):是一组 key 的集合,每个元素都是唯一,不重复且无序的

4. 简述上述数据类型的常用方法

字符串:

  1. 切片
mystr='luobodazahui'
mystr[1:3]

output

'uo'
  1. format
mystr2 = "welcome to luobodazahui, dear {name}"
mystr2.format(name="baby")

output

'welcome to luobodazahui, dear baby'
  1. join

可以用来连接字符串,将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

mylist = ['luo''bo''da''za''hui']
mystr3 = '-'.join(mylist)
print(mystr3)

outout

'luo-bo-da-za-hui'
  1. replace

String.replace(old,new,count) 将字符串中的 old 字符替换为 New 字符,count 为替换的个数

mystr4 = 'luobodazahui-haha'
print(mystr4.replace('haha''good'))

output

luobodazahui-good
  1. split

切割字符串,得到一个列表

mystr5 = 'luobo,dazahui good'
# 以空格分割
print(mystr5.split())
# 以h分割
print(mystr5.split('h'))
# 以逗号分割
print(mystr5.split(','))

output

['luobo,dazahui', 'good']
['luobo,daza', 'ui good']
['luobo', 'dazahui good']

列表:

  1. 切片 同字符串
  2. append 和 extend 向列表中国添加元素
mylist1 = [12]
mylist2 = [34]
mylist3 = [12]
mylist1.append(mylist2)
print(mylist1)
mylist3.extend(mylist2)
print(mylist3)

outout

[1, 2, [3, 4]]
[1, 2, 3, 4]
  1. 删除元素 del:根据下标进行删除 pop:删除最后一个元素 remove:根据元素的值进行删除
mylist4 = ['a''b''c''d']
del mylist4[0]
print(mylist4)
mylist4.pop()
print(mylist4)
mylist4.remove('c')
print(mylist4)

output

['b', 'c', 'd']
['b', 'c']
['b']
  1. 元素排序 sort:是将list按特定顺序重新排列,默认为由小到大,参数 reverse=True 可改为倒序,由大到小。 reverse:是将list逆置
mylist5 = [15234]
mylist5.sort()
print(mylist5)
mylist5.reverse()
print(mylist5)

output

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

字典:

  1. 清空字典 dict.clear()
dict1 = {
   'key1':1'key2':2}
dict1.clear()
print(dict1)

output

{}
  1. 指定删除 使用 pop 方法来指定删除字典中的某一项
dict1 = {
   'key1':1'key2':2}
d1 = dict1.pop('key1')
print(d1)
print(dict1)

output

1
{'key2': 2}
  1. 遍历字典
dict2 = {
   'key1':1'key2':2}
mykey = [key for key in dict2]
print(mykey)
myvalue = [value for value in dict2.values()]
print(myvalue)
key_value = [(k, v) for k, v in dict2.items() ]
print(key_value)

output

['key1', 'key2']
[1, 2]
[('key1', 1), ('key2', 2)]
  1. fromkeys 用于创建一个新字典,以序列中元素做字典的键,value 为字典所有键对应的初始值
keys = ['zhangfei''guanyu''liubei''zhaoyun']
dict.fromkeys(keys, 0)

output

{'zhangfei': 0, 'guanyu': 0, 'liubei': 0, 'zhaoyun': 0}

5. 简述 Python 中的字符串编码

计算机在最初的设计中,采用了8个比特(bit)作为一个字节(byte)的方式。一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节

最早,计算机只有 ASCII 编码,即只包含大小写英文字母、数字和一些符号,这些对于其他语言,如中文,日文显然是不够用的。后来又发明了Unicode,Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。UTF-8 是隶属于 Unicode 的可变长的编码方式

在 Python 中,以 Unicode 方式编码的字符串,可以使用 encode() 方法来编码成指定的 bytes,也可以通过 decode() 方法来把 bytes 编码成字符串 encode

"中文".encode('utf-8')

output

b'\xe4\xb8\xad\xe6\x96\x87'

decode

b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

output

'中文'

6.一行代码实现数值交换

1a = 1
2b = 2
3a, b = b, a
4print(a, b)

output

12 1

7. is 和 == 的区别

先来看个例子

c = d = [1,2]
e = [1,2]
print(c is d)
print(c == d)
print(c is e)
print(c == e)

output

True
True
False
True

== 是比较操作符,只是判断对象的值(value)是否一致,而 is 则判断的是对象之间的身份(内存地址)是否一致。对象的身份,可以通过 id() 方法来查看

id(c)
id(d)
id(e)

output

88748080
88748080
88558288

可以看出,只有 id 一致时,is 比较才会返回 True,而当 value 一致时,== 比较就会返回 True

8.Python 函数中的参数类型

位置参数,默认参数,可变参数,关键字参数

9.*arg**kwarg 作用

允许我们在调用函数的时候传入多个实参

def test(*arg, **kwarg):
    if arg:
        print("arg:", arg)
    if kwarg:
        print("kearg:", kwarg)
test('ni''hao', key='world')

output

arg: ('ni', 'hao')
kearg: {'key': 'world'}

可以看出, *arg 会把位置参数转化为 tuple **kwarg 会把关键字参数转化为 dict

10.一行代码实现1-100之和

sum(range(1101))

11.获取当前时间

import time
import datetime
print(datetime.datetime.now())
print(time.strftime('%Y-%m-%d %H:%M:%S'))

output

2019-06-07 18:12:11.165330
2019-06-07 18:12:11

12.PEP8 规范

简单列举10条:

  • 尽量以免单独使用小写字母'l',大写字母'O',以及大写字母'I'等容易混淆的字母

  • 函数命名使用全部小写的方式,可以使用下划线

  • 常量命名使用全部大写的方式,可以使用下划线

  • 使用 has 或 is 前缀命名布尔元素,如: is_connect = True; has_member = False

  • 不要在行尾加分号, 也不要用分号将两条命令放在同一行

  • 不要使用反斜杠连接行

  • 顶级定义之间空2行, 方法定义之间空1行,顶级定义之间空两行

  • 如果一个类不继承自其它类, 就显式的从object继承

  • 内部使用的类、方法或变量前,需加前缀_表明此为内部使用的

  • 要用断言来实现静态类型检测

13.Python 的深浅拷贝

浅拷贝

import copy
list1 = [123, [12]]
list2 = copy.copy(list1)
list2.append('a')
list2[3].append('a')
print(list1, list2)

output

[1, 2, 3, [1, 2, 'a']] [1, 2, 3, [1, 2, 'a'], 'a']

能够看出,浅拷贝只成功”独立“拷贝了列表的外层,而列表的内层列表,还是共享的

深拷贝

import copy
list1 = [123, [12]]
list3 = copy.deepcopy(list1)
list3.append('a')
list3[3].append('a')
print(list1, list3)

output

[1, 2, 3, [1, 2]] 
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhouluobo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值