900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Python面试宝典之基础篇-05

Python面试宝典之基础篇-05

时间:2020-03-07 19:03:01

相关推荐

Python面试宝典之基础篇-05

题目21:输入年月日,判断这个日期是这一年的第几天。

方法一:不使用标准库中的模块和函数。

def is_leap_year(year):

"""判断指定的年份是不是闰年,平年返回False,闰年返回True"""

return year % 4 == 0 and year % 100 != 0 or year % 400 == 0

def which_day(year, month, date):

"""计算传入的日期是这一年的第几天"""

# 用嵌套的列表保存平年和闰年每个月的天数

days_of_month = [

[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],

[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

]

days = days_of_month[is_leap_year(year)][:month - 1]

return sum(days) + date方法二:使用标准库中的datetime模块。

import datetime

def which_day(year, month, date):

end = datetime.date(year, month, date)

start = datetime.date(year, 1, 1)

return (end - start).days + 1题目22:平常工作中用什么工具进行静态代码分析。

点评:静态代码分析工具可以从代码中提炼出各种静态属性,这使得开发者可以对代码的复杂性、可维护性和可读性有更好的了解,这里所说的静态属性包括:

代码是否符合编码规范,例如:PEP-8。

代码中潜在的问题,包括:语法错误、缩进问题、导入缺失、变量覆盖等。

代码中的坏味道。

代码的复杂度。

代码的逻辑问题。

工作中静态代码分析主要用到的是Pylint和Flake8。Pylint可以检查出代码错误、坏味道、不规范的代码等问题,较新的版本中还提供了代码复杂度统计数据,可以生成检查报告。Flake8封装了Pyflakes(检查代码逻辑错误)、McCabe(检查代码复杂性)和Pycodestyle(检查代码是否符合PEP-8规范)工具,它可以执行这三个工具提供的检查。

题目23:说一下你知道的Python中的魔术方法。

点评:魔术方法也称为魔法方法,是Python中的特色语法,也是面试中的高频问题。

题目24:函数参数*arg和**kwargs分别代表什么?

Python中,函数的参数分为位置参数、可变参数、关键字参数、命名关键字参数。*args代表可变参数,可以接收0个或任意多个参数,当不确定调用者会传入多少个位置参数时,就可以使用可变参数,它会将传入的参数打包成一个元组。**kwargs代表关键字参数,可以接收用参数名=参数值的方式传入的参数,传入的参数的会打包成一个字典。定义函数时如果同时使用*args和**kwargs,那么函数可以接收任意参数。

题目25:写一个记录函数执行时间的装饰器。

点评:高频面试题,也是最简单的装饰器,面试者必须要掌握的内容。

方法一:用函数实现装饰器。

from functools import wraps

from time import time

def record_time(func):

@wraps(func)

def wrapper(*args, **kwargs):

start = time()

result = func(*args, **kwargs)

print(f'{func.__name__}执行时间: {time() - start}秒')

return result

return wrapper方法二:用类实现装饰器。类有__call__魔术方法,该类对象就是可调用对象,可以当做装饰器来使用。

from functools import wraps

from time import time

class Record:

def __call__(self, func):

@wraps(func)

def wrapper(*args, **kwargs):

start = time()

result = func(*args, **kwargs)

print(f'{func.__name__}执行时间: {time() - start}秒')

return result

return wrapper说明:装饰器可以用来装饰类或函数,为其提供额外的能力,属于设计模式中的代理模式。

扩展:装饰器本身也可以参数化,例如上面的例子中,如果不希望在终端中显示函数的执行时间而是希望由调用者来决定如何输出函数的执行时间,可以通过参数化装饰器的方式来做到,代码如下所示。

from functools import wraps

from time import time

def record_time(output):

"""可以参数化的装饰器"""

def decorate(func):

@wraps(func)

def wrapper(*args, **kwargs):

start = time()

result = func(*args, **kwargs)

output(func.__name__, time() - start)

return result

return wrapper

return decorate温馨提示:Python面试宝典会持续更新,从基础到项目实战的内容都会慢慢覆盖到。虽然每天只更新5个题目,但是每道题扩散出的信息量还是比较大的,希望对找工作的小伙伴所有帮助。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。