张家界官方网站,2023年1月热点新闻事件,洛阳最新消息,常青藤网站建设文章目录前言应试者需知#xff08;一#xff09;Python 语言基础能力评估1、理解问题并完成代码#xff1a;2、阅读理解代码#xff0c;并在空白处补充完整代码#xff1a;3、编写一个装饰器#xff1a;exposer4、阅读代码并在空白处补充完整代码#xff1a;5、自行用P…
文章目录前言应试者需知一Python 语言基础能力评估1、理解问题并完成代码2、阅读理解代码并在空白处补充完整代码3、编写一个装饰器exposer4、阅读代码并在空白处补充完整代码5、自行用Python代码实现一个简单的.ini配置文件解析类结语前言 大家好我是writer桑。这是自己整理的 Python 真实的面试题分享出来一起学习。本章内容展示的是试题的第一部分 Python 语言基础能力评估。未经作者允许禁止转载。附上笔者的代码并非标准答案仅供参考如有不同的见解欢迎私信评论区讨论。 应试者需知
1、本能力评估试题旨在全面评估Python软件工程师的知识结构和技能水平试题会涵盖Python语言的基础知识、Linux操作系统常识、Linux Shell命令、计算机网络知识、Web前/后端开发相关的知识等多个维度。
一些试题因应试者的知识/经验没有涵盖到而无法作答属于正常现象作答时请不要困扰于自己能力范围之外的问题而影响其它试题作答、进而影响能力评估结果和影响自己的信心。无法作答的问题应直接跳过不要勉强【能答对30% - 50%的试题属于正常水平】
2、认真阅读试题所提出的问题、仔细分析试题所描述的上下文内容包括代码上下文、代码内的注释提示尽自己的能力去理解和分析不会有考官对问题进行另行解释。
3、作答时间60分钟请恪守诚信、不要舞弊本考试仅作为一种能力评估手段每个试题/填空没有定量评分请不要主观猜测试题的分值比重及其对考核成绩的占比。
一Python 语言基础能力评估
1、理解问题并完成代码 代码示例
def roution(arg1, *args, **kwargs):print(arg1)print(args)print(kwargs)# 以主进程的方式运行
if __name__ __main__:roution(value1, value2,3,extra_args hello,world)运行结果 补充说明 直接使用 print 输出函数进行输出即可。
2、阅读理解代码并在空白处补充完整代码 代码示例
import inspect
import typing
from typing import Callable, List def parse_func_args(func: Callable): # 判断参数func是否为可调用对象 result {} # 判断函数是否为异步调用if inspect.isasyncgenfunction(func):result[async_call] True else: result[async_call] False result[func] func result[doc] inspect.getdoc(func) # 获取可调用对象的文档字符串 sign inspect.signature(func) # signature 函数获取函数的签名对象包括参数信息。pos_args [] kw_args [] result[pos_args] pos_argsresult[kw_args] kw_args for param in sign.parameters.values():if param.name check_list or param.name result_list: continue # 开始判断每个param参数的属性item {name: param.name} if param.default is not inspect._empty:item[optional] True else: item[optional] Falseif param.annotation is inspect._empty:item[type] str # 补充代码检查参数是否为str, int, float, bool 类型 elif param.annotation is str:item[type] strelif param.annotation is int:item[type] intelif param.annotation is float:item[type] floatelif param.annotation is bool:item[type] boolelif param.annotation is list or param.annotation is typing.List[str]:item[type] listelse:item[type] str # defaultif param.kind inspect.Parameter.POSITIONAL_ONLY or \param.kind inspect.Parameter.POSITIONAL_OR_KEYWORD:result[pos_args].append(item)else:result[kw_args].append(item)return result def func(num1: str, num2: int):return num1 * num2 # 以主进程的方式运行
if __name__ __main__:func(123,11)result parse_func_args(func)print(result)运行结果 补充说明 原题中关于位置参数、关键字参数的描述不是很合理麻烦大家自行甄别。上例中笔者写的代码也不是很好仅作参考。
3、编写一个装饰器exposer 代码示例
def exposer(a_func):def write_key(self, key):global_table[key] selfreturn a_func(self)return write_key# 假设有一个全局的Dict对象 “global_table”
global_table {} #编写的装饰器可用于任何自定义类的__init__方法装饰如下
class AnyType: exposerdef __init__(self):pass#被装饰过的类在构造时用户可指定一个名为 “key” 的参数
#此时新建的对象将以该key为索引记录在全局Dict对象“global_table”中。
object1 AnyType(key id001)
object2 AnyType(key id002)print(global_table)
# 此时global_table的内容将记录为
# { “id001”: object1, “id002”: object2 } 运行结果 补充说明 装饰器的写法有很多不止上例的一种。若有更好的写法欢迎评论区或者私信讨论。
4、阅读代码并在空白处补充完整代码 代码示例
import asyncio
msg_queue []msg_lock asyncio.Lock() # 定义消息队列的锁
signal_event asyncio.Event() # 定义信号事件async def backend_task():try:for counter in range(0,1000):async with msg_lock: # 在访问msg_queue之前先获得锁msg_queue.append(fmsg{counter})signal_event.set() # 设置信号事件通知main函数可以取出消息了await asyncio.sleep(0.5)except asyncio.CancelledError: # 处理任务被取消的异常print(后台任务被取消!)returnexcept Exception as e: # 处理其他未知异常print(未知异常!)returnasync def main():task asyncio.create_task(backend_task())try:await signal_event.wait() # 等待信号事件async with msg_lock: # 在访问msg_queue之前先获得锁msg msg_queue.pop()print(f获取到后台任务的通知消息 {msg})except Exception: # 处理异常print(异常正在停止后台任务…)task.cancel() # 取消后台任务await task # 等待后台任务结束loop asyncio.get_event_loop()try:loop.run_until_complete(main())
finally:loop.close() # 关闭事件循环
运行结果 补充说明 此题考查的是 python 中的 asyncio 模块需要对 asyncio 模块中的锁和事件的应用有一定的掌握程度。
5、自行用Python代码实现一个简单的.ini配置文件解析类 代码示例
import configparser# 一个简单的.ini配置文件解析类
class IniClass:def analysis_method():# 实例化一个 ConfigParser 实例 config configparser.ConfigParser() # 打开 ini 文件 config.read(./cfg.ini, encoding utf-8)# 获取所有的 section print(config.sections())# [SectionName, Section2]# 指定section的所有parameter print(config[Section2])# 指定section输出value值print(config[Section2].values())# 指定section以item的形式输出print(config[Section2].items())# 以主进程的方式运行
if __name__ __main__: IniClass.analysis_method()ini 文件的内容文件名为 cfg
运行结果
补充说明 解析 .ini 文件可以使用 python 中的 configparser 库这个库用法很多并不局限于上例。 结语 以上就是 Python 语言基础能力评估的展示啦希望能够帮到大家感谢大家的支持。再次声明笔者的代码仅作参考。