附答案|最新Python面试题之Python基础(1)
写在之前
Python 面试的时候会涉及到很多的八股文,我准备连载一个新的系列【最新Python面试题】
这些面试题是我结合自身经验,以及搜集整理的企业面试真题,主要有以下几个方面:
- Python基础
- Python机制
- Python面向对象
- Python笔试题
- Python算法
- Django框架
- Flask框架
- 其他开源框架
- Scrapy数据爬虫
- Python正则式
- Python数据分析
- Pandas框架
- Python拓展知识(数据结构,常见算法,数据库原理及调优,中间件…)
虽然这些是面试“八股文”,但是只会背答案与流畅的并能结合自身思考的回答,对于面试官来说还是有很大区别的。
所以除了在每道面试题后会提供仔细整理和验证后的答案以外,在每篇文章中会挑选一道难度高且重点的题目做详细的讲解。
希望大家不但能知其然也可以知其所以然,在面试的时候让面试官眼前一亮,这样白花花的offer不就到手了嘛
每天会更新10道题左右,无论是准备面试还是自己学习,这份面试题绝对值得你去看
大家可以关注我,再关注我,使劲关注我,不要错过每天的更新~
1.阐述以下方法 @classmethod, @staticmethod, @property?
类方法classmethod
在python中,classmethod是内置的装饰器之一,它的作用如下
声明一个方法是类方法,可以不用创建实例对象就调用类方法,调用方式:类名.方法名,其中方法的参数self变成cls,cls的作用同self一样。
静态方法staticmethod
同样的,staticmethod也是python内置的装饰器之一,它的作用如下
声明一个方法是一个静态方法,可以不用创建实例对象就调用类方法,调用式:类名.方法名,其中方法的参数self可以去掉。
属性property
python中property一般有两个作用,
@property 将类的方法转为只读的类属性
property 重新实现一个属性的 getter 和 setter 方法
2.解释什么是lambda函数?它有什么好处?
什么是lambda函数:
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的匿名函数。
使用lambda函数的好处:
1、lambda函数比较轻便,即用即扔,很适合需要完成某一项简单功能,但是这个简单的功能只在此一处使用,连名字都很随意的情况下;
2、lambda是匿名函数,一般用来给filter,map,reduce这样的函数式编程服务;
3.Python里面如何实现tuple和list的转换?
# list转tuple 使用tuple函数
list_a = [1,2,3,4,5]
print(type(tuple(list_a)))
# tuple转list 使用list函数
tuple_b = (1,2,3,4,5)
print(type(list(tuple_b)))
4.阐述Python:except的用法和作用?
在Python中,try
、except
、else
和 finally
语句用于异常处理,它们允许程序在遇到错误时执行特定的代码块,而不是立即崩溃。下面是这些关键字的基本用法:
- try:尝试执行的代码块,可能会引发异常。
- except:如果
try
块中的代码引发了异常,except
块将被执行。你可以指定一个或多个异常类型,以捕获并处理特定的异常。 - else:如果
try
块没有引发异常,else
块将被执行。这允许你在没有错误的情况下执行一些代码。 - finally:无论是否发生异常,
finally
块中的代码都会执行。这通常用于清理操作,比如关闭文件或释放资源。
下面是这些关键字的一个简单示例:
try:
# 尝试执行的代码
result = 10 / 0
except ZeroDivisionError:
# 如果发生了除以零的错误,则执行此块
print("不能除以零!")
except Exception as e:
# 捕获其他类型的异常
print(f"发生了一个错误:{e}")
else:
# 如果没有异常发生,则执行此块
print("没有错误发生,结果是:", result)
finally:
# 无论是否发生异常,都会执行此块
print("这是 finally 块,总是会执行。")
5.阐述Python下range()函数的用法?
range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。
6.Python里面match()和search()的区别?
在Python中,match()和search()是两个用于正则表达式匹配的方法,它们来自于re模块(正则表达式模块)。它们之间的主要区别在于匹配的起始位置和匹配方式。
1.match()方法:
·match()方法只从字符串的开头进行匹配,只有在字符串的开头找到匹配时才会返回匹配对象,否则返回None。
·它相当于在正则表达式模式中加入了一个^,表示从字符串的开头开始匹配。
2.search()方法:
·search()方法会在整个字符串中搜索匹配,只要找到一个匹配,就会返回匹配对象,否则返回None。
·它相当于在正则表达式模式中没有加入任何特殊字符,表示在整个字符串中查找匹配。
下面通过代码演示来说明它们的区别:
7.如何在一个function里面设置一个全局的变量?
# 使用global关键字
x = 0 # 全局变量
def set_global():
global x # 指定x是全局变量
x = 5
set_global()
print(x) # 输出: 5
8.简述Python单引号,双引号,三引号的区别?
单引号和双引号:
单引号(')和双引号(")在大多数情况下可以互换使用,用于创建字符串。
它们之间的主要区别在于,如果你的字符串中包含单引号或双引号,你可以使用另一种引号来避免转义字符。
# 使用单引号
single_quoted = 'He said, "Hello, world!"'
# 使用双引号
double_quoted = "He said, 'Hello, world!'"
三引号可以是三个单引号(''')或三个双引号("""),用于多行字符串。
它们允许字符串跨越多行,而不需要使用转义字符(如\n)来表示换行。
三引号字符串可以包含单引号或双引号,而不需要转义,这在处理文档或代码等需要保留引号的文本时非常有用。
9.简述Python的函数参数传递?
所有的变量都可以理解是内存中一个对象的“引用”
这里记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。(这就是这个问题的重点)
比如:
a = 1
def fun(a):
a = 2
fun(a)
print a # 1
当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用已经无关.所以第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改.
重点题详解
什么是Python字典推导式?
在编程中,字典是一个非常方便和实用的数据结构。它可以储存键值对,可以随时添加、删除和修改,并且可以通过键快速访问值。Python中的字典也是非常易用的。除了常规的定义和操作字典元素之外,我们还可以使用Python的字典推导式来快速构建字典。
什么是python字典推导式
字典推导式是一种简洁而优雅的语法,它允许我们通过使用单行代码快速创建一个新的字典。与列表推导式和集合推导式类似,字典推导式是在一组可迭代对象(比如列表、字符串、元组等)和一个表达式的基础上创建字典的。
字典推导式的语法如下:
{key_expression: value_expression for item in iterable if condition}
key_expression
:字典的键。value_expression
:字典的值。item
:从iterable
中迭代出的元素。iterable
:一个可迭代对象,比如列表、元组或另一个字典。condition
:一个可选的条件表达式,只有当条件为真时,key_expression
和value_expression
才会被添加到字典中。
下面是使用案例
# 假设我们有一个数字列表,我们想创建一个字典,其中包含每个数字及其平方
numbers = [1, 2, 3, 4, 5]
squares = {x: x**2 for x in numbers}
print(squares) # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
另一个例子,如果我们想从一个列表的元素中创建一个字典,其中包含元素及其在列表中的位置:
# 给定一个单词列表,创建一个字典,其中包含单词和它们在列表中的位置
words = ['apple', 'banana', 'cherry']
word_positions = {word: index for index, word in enumerate(words)}
print(word_positions) # 输出: {'apple': 0, 'banana': 1, 'cherry': 2}
更多资料干货、行业内幕 长期免费更新中!