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八股文

你可能感兴趣的:(python语言,python,开发语言)