Python 基础面经(整理)第二篇

目录

1 python 的变量、对象和引用?

2 python里面如何生成随机数?

3 创建百万级实例如何节省内存?

4 什么是python中的类型转换?

5 什么是python的作用域?

6 什么是python自省?

7 什么是PEP 8 编码风格?

8 关于python 程序的运行方面,有什么手段能提升性能?

9 dict的items()方法与iteritems()方法的不同?

10 os.path 和 sys.path 的区别?

11 三元运算规则?

12 zip函数的使用方法?

13 with 方法打开文件的作用?

14 字符串转整数?

15 字符串单词统计

16 一行代码实现xx类题目

17 字典和json的区别?

18 Python中的os模块常见方法?


1 python 的变量、对象和引用?

  • 变量是到内存空间的指针,也就是拥有指向对象链接的空间
  • 对象是一块内存,表示它们所代表的值
  • 引用就是自动形成的从变量到对象的指针

2 python里面如何生成随机数?

在python中用于生成随机数的模块是random,在使用之前需要import.

random.random()生成一个0-1之间的随机浮点数
random.uniform(a, b)生成[a, b]之间的浮点数
random.randint(a, b)生成[a, b]之间的整数
random.randrange(a, b, step)

在指定的集合[a, b)中,以step为基数

随机取一个数

random.choice(sequence)从特定序列中随机取一个元素,可以是字符串、列表、元组等

3 创建百万级实例如何节省内存?

可以定义类的slot属性,用它来声明实例属性的列表,可以减少内存空间的目的。

class User2:
    __slot__ = ['id', 'name', 'sex', 'status']
    def __init__(self, id, name, sex, status):
        self.id = id
        self.name = name
        self.sex = sex
        self.status = status

上边的例子相较于建立普通的类的方法,没有{'__weakref__', '__dict__'}两个属性,在不弱引用的情况下weakref不占用多少内存,而dict属性占用大量内存。内存检测方式调用sys模块中的getsizeof()函数。

4 什么是python中的类型转换?

类型转换就是指将一种数据类型转换为另一种数据类型。

int()将任何数据类型转换为整数型
float()将任何数据类型转换为小数型
ord()将字符转化为整数
tuple()转换为元组
list()将任何数据类型转换为列表型
set()转换为set型后返回
dict()将顺序元组(键, 值)转换为字典
str()整数转换为字符串
complex(real, imag)将实数转换为复数
hex()将整数转化为十六进制
oct()将整数转化为八进制

5 什么是python的作用域?

       语言区分作用域,是为了复用变量名。引入作用域,相当于给变量划分了各自的‘隔离区’,在不同‘隔离区’里,查找变量变得很容易。

python是动态类型的语言,变量是在定义的时候赋值的。

变量作用域取决于其定义的位置。在python里,只有函数、类、模块才会产生作用域,代码块不会产生作用域。

  • 局部作用域:顶一字在函数内部的变量、定义在函数声明中的形式参数
  • 嵌套作用域:定义在函数中,嵌套函数外,且被嵌套函数引用的变量
  • 全局作用域:定义在.py文件内,且函数、类之外的变量
  • 内置作用域:定义在builtin中的变量。内置作用域是通过一个名为builtin的标准模块来实现的,但是这个变量名自身并没有放入内置作用域,所以必须导入这个文件才能够使用它。

6 什么是python自省?

在计算机编程领域里,自省是一种能力,是通过一定机制在程序运行时获知对象的类型及对象的内部结构,Python的自省能力还是很强大的,因为Python中一切皆对象,我们不仅可以获取对象的类型,还可以获取对象内部的属性。

7 什么是PEP 8 编码风格?

  1. 尽量避免单独使用小写字母‘l’,大写字母‘O’,以及大写字母‘I’等混淆的字母
  2. 函数命名全部小写的方式,可以使用下划线。
  3. 常量命名使用全部大写方式,可以使用下划线。
  4. 使用has或者is前缀命名布尔元素,如is_connect = True;has_member = False
  5. 不要在行尾加分号,也不要用分号将两条命令放在同一行。
  6. 不要使用反斜杠链接行
  7. 方法定义之间空1行, 顶级定义之间空两行
  8. 如果一个类不继承其他类,就显示的从Object继承。
  9. 内部使用的类、方法或变量前,需加前缀_表明此为内部使用的。
  10. 要用断言来实现静态类型检测
  11. import应该一次只导入一个模块   import numpy
  12. 导入多个模块   from subprocess import Popen, PIPE

8 关于python 程序的运行方面,有什么手段能提升性能?

  1. 使用多进程,充分利用机器的多核性能
  2. 对于性能影响较大的部分代码,可以使用C或C++编写
  3. 对于IO阻塞造成的性能影响,可以使用IO多路复用来解决
  4. 尽量使用python的内建函数
  5. 尽量使用局部变量

9 dict的items()方法与iteritems()方法的不同?

items方法将所有的字典以列表的方式返回,其中项再返回的时候没有特殊的顺序。

iteritems方法有相似的作用,但是返回一个迭代器对象

10 os.path 和 sys.path 的区别?

os.path是module,包含了各种处理长文件名的函数

sys.path是由目录名构成的列表

11 三元运算规则?

如果a>b成立,那么就输出a - b,否则a+b

a, b = 1, 2
h = a - b if a > b else a + b
print(h)

3

12 zip函数的使用方法?

zip()函数将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回这些元组组成的列表

list1 = ['zhang', 'wang', 'liu']
list2 = [0, 1, 2]
list(zip(list1, list2))

[('zhang', 0), ('wang', 1), ('liu', 2)]

13 with 方法打开文件的作用?

打开文件在进行读写的时候可能会出现一些异常,如果按照常规的f.open()写法,我们需要try,except, finnally,做异常判断,并且文件不管遇到什么情况,都需要执行f.close()关闭文件,with方法帮我们实现了finally中f.close()。

with open("hello.txt", "a") as f:
    f.write("hello write!")

14 字符串转整数?

s = ('1,2,3,4,5,6,7,8,9')
list(map(lambda x: int(x), s.split(",")))

[1, 2, 3, 4, 5, 6, 7, 8, 9]

15 字符串单词统计

统计字符串中字母个数:

from collections import Counter
mystr = "sadad, dasda, asda, dasd"
Counter(mystr)

Counter({'s': 4, 'a': 7, 'd': 7, ',': 3, ' ': 3})

统计字符串中单词的个数:

mystr = "sadad, dasda, asda, dasd"
len(mystr.split(" "))

4

16 一行代码实现xx类题目

1 一行代码实现1-100的和

sum(range(1,101))

5050

2 实现数值交换

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

2 1

3 一行代码求奇偶

[x for x in range(10) if x % 2 == 1]

[1, 3, 5, 7, 9]

4 一行代码展开列表

ls = [[1, 2, 3], [4, 5, 6]]
[j for i in ls for j in i]

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

5 一行代码打乱列表

import random
ls = [1, 2, 3, 4, 5]
random.shuffle(ls)
ls

[2, 5, 4, 1, 3]

6 一行代码反转字符

mystr = "zheshishenme"
mystr[::-1]

'emnehsihsehz'

7 查看目录下所有文件

import os
os.listdir()

8 一行代码去除字符串间的空格

ls = "my name is haha"
ls.replace(" ", "")

'mynameishaha'
ls = "my name is haha"
"".join(ls.split(" "))

'mynameishaha'

9 一行代码实现字符串整数列表变成整数列表

a = ["1", "2", "3"]
list(map(lambda x: int(x), a))

[1, 2, 3]

10 一行代码删除列表中重复的值

mylist = [1, 2, 2, 3, 3]
list(set(mylist))

[1, 2, 3]

11 一行代码实现9*9乘法表

print('\n'.join([" ".join(['%s*%s=%-2s' % (j, i, i * j) for j in range(1, i + 1)]) for i in range(1, 10)]))

1*1=1 
1*2=2  2*2=4 
1*3=3  2*3=6  3*3=9 
1*4=4  2*4=8  3*4=12 4*4=16
1*5=5  2*5=10 3*5=15 4*5=20 5*5=25
1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

12 一行代码找出两个列表相同的元素

a = [1, 2, 3, 4]
b = [3, 4, 5, 7]
set(a) & set(b)

{3, 4}

13 一行代码找出两个列表不同的元素

a = [1, 2, 3, 4]
b = [3, 4, 5, 7]
set(a) ^ set(b)

{1, 2, 5, 7}

14一行代码合并两个字典

ls1 = {"na": "None"}
ls2 = {"lv": "sign"}
ls1.update(ls2)
ls1

{'na': 'None', 'lv': 'sign'}

15 一行代码实现字典键从小到大排序

ls = {"na": "100", "la": "13", "za": "ph"}
sorted(ls.items(), key = lambda x: x[0])

[('la', '13'), ('na', '100'), ('za', 'ph')]

17 字典和json的区别?

字典是一种数据结构,json是一种数据的表现形式,字典 的key值只要是能hash的就行,json必须是字符串。

18 Python中的os模块常见方法?

os.remove()删除文件
os.rename()重命名文件

os.walk()

生成目录树下的所有文件
os.chdir()改变目录
os.mkdir/makedirs()创建目录\多层目录
os.rmdir/removedirs()删除目录\多层目录
os.listdir()列出指定目录的文件
os.getcwd()取得当前工作目录
os.chmod()改变目录权限
os.path.basename()去掉目录路径,返回文件名
os.path.dirname()去掉文件名,返回目录路径
os.path.join()将分离的各部分组成一个路径名
os.path.split()返回(dirname(), basename())元组
os.path.splitext()返回(filename, extension)元组
os.path.getatime\ctime\mtime()分别返回最近访问、创建、修改时间
os.path.getsize()返回文件大小
os.path.exists()是否存在
os.path.isabs()是否为绝对路径
os.path.isdir()是否为目录
os.path.isfile()是否为文件

参考:

(3条消息) 《Python进阶系列》二十六:面试题目:[lambda x: x*i for i in range(4)]_奋斗的西瓜瓜的博客-CSDN博客_def fun1(): return [lambda x: i * x for i in range

(3条消息) 【Python八股文系列】:100个Python的面试/笔试高频考点_奋斗的西瓜瓜的博客-CSDN博客_python八股文

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值