总结25道必备的Python面试题

1、什么是pickling和unpickling?

pickling是将Python对象(甚至是Python代码),转换为字符串的过程。

unpickling是将字符串,转换为原来对象的逆过程。

2、解释*args和**kwargs?

*args,是当我们不确定要传递给函数参数的数量时使用的。

 

def add(* num):
    sum = 0 
    for val in num:
        sum = val + sum 
    print(sum)


add(4,5)
add(7,4,6)
add(10,34,23)
--------------------- 

17 
67

**kwargs,是当我们想将字典作为参数传递给函数时使用的。

 

def intro(**data):
    print("\nData type of argument:",type(data))
    for key, value in data.items():
        print("{} is {}".format(key,value))


intro(name="alex",Age=22, Phone=1234567890)
intro(name="louis",Email="a@gmail.com",Country="Wakanda", Age=25)
--------------------------------------------------------------
Data type of argument: <class 'dict'>
name is alex
Age is 22
Phone is 1234567890

Data type of argument: <class 'dict'>
name is louis
Email is a@gmail.com
Country is Wakanda
Age is 25

3、解释re模块的split()、sub()、subn()方法?

split():只要模式匹配,此方法就会拆分字符串。

sub():此方法用于将字符串中的某些模式替换为其他字符串或序列。

subn():和sub()很相似,不同之处在于它返回一个元组,将总替换计数和新字符串作为输出。

 

import re
string = "There are two ball in the basket 101"


re.split("\W+",string)
---------------------------------------
['There', 'are', 'two', 'ball', 'in', 'the', 'basket', '101']

re.sub("[^A-Za-z]"," ",string)
----------------------------------------
'There are two ball in the basket'

re.subn("[^A-Za-z]"," ",string)
-----------------------------------------
('There are two ball in the basket', 10)

4、Python中的生成器是什么?

生成器(generator)的定义与普通函数类似,生成器使用yield关键字生成值。

如果一个函数包含yield关键字,那么该函数将自动成为一个生成器。

 

# A program to demonstrate the use of generator object with next() A generator function 
def Fun(): 
   yield 1
   yield 2
   yield 3

# x is a generator object 
x = Fun()
print(next(x))
-----------------------------
1
print(next(x))
-----------------------------
2

5、如何使用索引来反转Python中的字符串?

 

string = 'hello'

string[::-1]
>'olleh'

6、类和对象有什么区别?

类(Class)被视为对象的蓝图。类中的第一行字符串称为doc字符串,包含该类的简短描述。

在Python中,使用class关键字可以创建了一个类。一个类包含变量和成员组合,称为类成员。

对象(Object)是真实存在的实体。在Python中为类创建一个对象,我们可以使用obj = CLASS_NAME()

例如:obj = num()

使用类的对象,我们可以访问类的所有成员,并对其进行操作。

 

class Person:
    """ This is a Person Class"""
    # varable
    age = 10
    def greets(self):
        print('Hello')


# object
obj = Person()
print(obj.greet)
----------------------------------------
Hello

7、你对Python类中的self有什么了解?

self表示类的实例。

通过使用self关键字,我们可以在Python中访问类的属性和方法。

注意,在类的函数当中,必须使用self,因为类中没有用于声明变量的显式语法。

8、_init_在Python中有什么用?

“__init__”是Python类中的保留方法。

它被称为构造函数,每当执行代码时都会自动调用它,它主要用于初始化类的所有变量。

9、解释一下Python中的继承?

继承(inheritance)允许一个类获取另一个类的所有成员和属性。继承提供代码可重用性,可以更轻松地创建和维护应用程序。

被继承的类称为超类,而继承的类称为派生类/子类。

10、Python中OOPS是什么?

面向对象编程,抽象(Abstraction)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)

11、什么是抽象?

抽象(Abstraction)是将一个对象的本质或必要特征向外界展示,并隐藏所有其他无关信息的过程。

12、什么是封装?

封装(Encapsulation)意味着将数据和成员函数包装在一起成为一个单元。

它还实现了数据隐藏的概念。

13、什么是多态?

多态(Polymorphism)的意思是「许多形式」。

子类可以定义自己的独特行为,并且仍然共享其父类/基类的相同功能或行为。

14、什么是Python中的猴子补丁?

猴子补丁(monkey patching),是指在运行时动态修改类或模块。

 

from SomeOtherProduct.SomeModule import SomeClass

def speak(self):
    return "Hello!"

SomeClass.speak = speak

15、Python支持多重继承吗?

Python可以支持多重继承。多重继承意味着,一个类可以从多个父类派生。

16、Python中使用的zip函数是什么?

zip函数获取可迭代对象,将它们聚合到一个元组中,然后返回结果。

zip()函数的语法是zip(*iterables)

 

numbers = [1, 2, 3]
string = ['one', 'two', 'three'] 
result = zip(numbers,string)

print(set(result))
-------------------------------------
{(3, 'three'), (2, 'two'), (1, 'one')}

17、解释Python中map()函数?

map()函数将给定函数应用于可迭代对象(列表、元组等),然后返回结果(map对象)。

我们还可以在map()函数中,同时传递多个可迭代对象。 

 

numbers = (1, 2, 3, 4)
result = map(lambda x: x + x, numbers)

print(list(result))

18、Python中的装饰器是什么?

装饰器(Decorator)是Python中一个有趣的功能。

它用于向现有代码添加功能。这也称为元编程,因为程序的一部分在编译时会尝试修改程序的另一部分。

 

def addition(func):
    def inner(a,b):
        print("numbers are",a,"and",b)
        return func(a,b)
    return inner

@addition
def add(a,b):
   print(a+b)

add(5,6)
---------------------------------
numbers are 5 and 6
sum: 11

19、编写程序,查找文本文件中最长的单词

 

def longest_word(filename):
    with open(filename, 'r') as infile:
              words = infile.read().split()
    max_len = len(max(words, key=len))
    return [word for word in words if len(word) == max_len]

print(longest_word('test.txt'))
----------------------------------------------------
['comprehensions']

20、编写程序,检查序列是否为回文

 

a = input("Enter The sequence")
ispalindrome = a == a[::-1]

ispalindrome
>True

21、编写程序,打印斐波那契数列的前十项

 

fibo = [0,1]
[fibo.append(fibo[-2]+fibo[-1]) for i in range(8)]

fibo
> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

22、编写程序,计算文件中单词的出现频率

 

from collections import Counter

def word_count(fname):
        with open(fname) as f:
                return Counter(f.read().split())

print(word_count("test.txt"))

23、编写程序,输出给定序列中的所有质数

 

lower = int(input("Enter the lower range:"))
upper = int(input("Enter the upper range:"))
list(filter(lambda x:all(x % y != 0 for y in range(2, x)), range(lower, upper)))

-------------------------------------------------
Enter the lower range:10
Enter the upper range:50
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

24、编写程序,检查数字是否为Armstrong

图片

将每个数字依次分离,并累加其立方(位数)。

最后,如果发现总和等于原始数,则称为阿姆斯特朗数(Armstrong)。

 

num = int(input("Enter the number:\n"))
order = len(str(num))

sum = 0
temp = num

while temp > 0:
   digit = temp % 10
   sum += digit ** order
   temp //= 10

if num == sum:
   print(num,"is an Armstrong number")
else:
   print(num,"is not an Armstrong number")

25、用一行Python代码,从给定列表中取出所有的偶数和奇数

 

a = [1,2,3,4,5,6,7,8,9,10]
odd, even = [el for el in a if el % 2==1], [el for el in a if el % 2==0]

print(odd,even)
> ([1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值