Python面试题(二)

一、请写一个函数。该函数的输入是一个仅包含数字的list,输出一个新的list,其中每一个元素(element)要满足一下条件:
1.该元素是偶数
2.该元素在原list中是偶数的位置(index是偶数)

def init_list(temp):
    if not isinstance(temp,list):
        raise TypeError("类型不对")
    else:
        return [i for i in temp if i%2==0 and temp.index(i)%2==0]
temp = [0,1,2,3,5,4,6,7,8,9,10]
init_list(temp)

二、有下面三个Python的类,请问三个print分别输出什么?并请说明您的理解。

class Parent(object):
    attr='a'

class Child1(Parent):
    pass

class Child2(Parent):
    pass 
print Parent.attr,Child1.attr,Child2.attr
Child1.attr ='b'
print Parent.attr,Child1.attr,Child2.attr
Parent.attr='c'
print Parent.attr,Child1.attr,Child2.attr

输出结果

a a a
a b a
c b c

三、有下面一个函数

def multi_funcs():
    return [lambda x:x*i ,i for i in range(4)]

请问执行这个函数multi_func()的返回值是什么?
执行print [m(2) for m in multi_funcs()]
返回值是函数对象
[6,6,6,6]

四、请解释一下Python什么是装饰器(decorators),并写一个装饰器,装饰login函数,当login失败后再access_failure.log添加一则记录。记录包括登录时间,用户名,密码。

decorator就是一个返回函数的高阶函数

import logging
import functools
def login_log(fn):
    def wrapper():
        if not fn():
            logger = logging.getLogger("access_failure.log")
            logger.error("username,password")
        return fn()
    return wrapper

@login_log
def login():
    pass 

五、请完成一个函数merge_tuples_to_dict。该函数接受两个相同长度的tuple作为参数tuple1,tuple2,输出一个dict,其中tuple1中的值作为key,tuple2中的值作为value
def merge_tuples_to_dict(tuple1,tuple2):
pass
比如:merge_tuples_to_dict((‘a’,’b’,’c’,’d’),(1,2,3,4))

def merge_tuples_to_dict(tuple1,tuple2):
    dict = {}
    for i in range(len(tuple1)):
        dict[tuple1[i]]=tuple2[i]
    return dict 
dict = merge_tuples_to_dict(('a','b','c','d'),(1,2,3,4))

六、 请描述django从收到一个request请求到返回response的整个流程,请尽可能的详细。

1、 用户浏览器一个url,发起一个请求
2、在Web应用启动后,会生成一个 WSGIHandler 实例(根据setting中的WSGI_APPLICATION = ‘dailyblog.wsgi.application’ 调用函数),每次请求响应都用这个实例。
3、构造WSGIRequest。
WSGIHandler 处理器准备工作已经完成,随后它给调度程序发送一个信号 request_started(这个和Flask中的request_started信号差不多),然后根据入 environ 构造 WSGIRequest 对象,它的父类是HttpRequest。

4、 处理Middleware的request中间件
WSGIHander的get_response方法处理 _request_middleware 实例变量并调用其中的每一个方法,传入 HttpRequest 的实例作为参数,即请求到达Request Middlewares,中间件对request做一些预处理,如果中间件返回response,会直接响应请求。

5、 URLConf通过urls.py文件和请求的URL找到相应的视图函数

此时会创建django.core.urlresolvers.RegexURLResolver 的一个实例。

URLresolver 遵循一个相当简单的模式。对于在 URL 配置文件中根据 ROOT_URLCONF 的配置产生的每一个在 urlpatterns 列表中的条目,它会检查请 求的 URL 路径是否与这个条目的正则表达式相匹配,如果是的话,有两种选择:

如果这个条目有一个可以调用的 include,resolver 截取匹配的 URL,转 到 include 指定的 URL 配置文件并开始遍历其中 urlpatterns 列表中的 每一个条目。根据你 URL 的深度和模块性,这可能重复好几次。
否则,resolver 返回三个条目:匹配的条目指定的 view function;一个 从 URL 得到的未命名匹配组(被用来作为 view 的位置参数);一个关键 字参数字典,它由从 URL 得到的任意命名匹配组和从 URLConf 中得到的任 意其它关键字参数组合而成。
注意这一过程会在匹配到第一个指定了 view 的条目时停止,因此最好让你的 URL 配置从复杂的正则过渡到简单的正则,这样能确保 resolver 不会首先匹配 到简单的那一个而返回错误的 view function。

如果没有找到匹配的条目,resolver 会产生 django.core.urlresolvers.Resolver404 异常,它是 django.http.Http404 例 外的子类。后面我们会知道它是如何处理的。

6、 开始调用View中相应的视图函数或基于类的视图。

7、View进行一些处理,如通过模型Models返回数据。

8、如果需要,Views可以创建一个额外的Context,Context被当做变量传给Template。

9、Template渲染输出

10、渲染后的输出被返回到View

11、HTTPResponse被发送到Response Middlewares

12、Response Middlewares对response进行特定的处理,然后返回一个新的response

13、Response返回呈现给用户

14、一旦 middleware完成了最后环节,处理器将发送一个信号 request_finished,订阅这个信号的事件会清空并释放任何使用中的资源。比如,Django 的 request_finished 的订阅者subscriber会关闭所有数据库连接。

15、所有流程至此已经全部完成。

七、请问执行一下代码后,console上的输出是什么?请阐述原因。

class my_metaclass(type):
    def __new__(cls,class_name,parent,attributes):
        print "1"
        return super(my_metaclass,cls).__new__(cls,class_name,parent,attributes)

    def __init__(self,class_name,parent,attributes):
        print "2"
        super(my_metaclass,self).__init__(self)

    def __call__(self,*args,**kwargs):
        print "3"
        return super(my_metaclass,self).__call__(*args,**kwargs)
def my_class_decorator(cls):
    print "4"
    return cls

@my_class_decorator
class C(object):
    __metaclass__ = my_metaclass

    def __new__(cls):
        print "5"
        return super(C,cls).__new__(cls)

    def __init__(self):
        print "6"


c =C()

Python2.7程序结果

1
2
4
3
5
6

Python3.5程序结果

4
5
6
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在网上搜索“Python面试题下载”,会得到许多可供下载的资源。这些资源包含了各类Python面试题和答案,可以帮助准备Python相关职位的面试。下载这些面试题的好处是可以在自己的时间里进行练习和准备,提高自己的面试技巧和知识水平。 Python面试题通常分为基础、进阶和算法三个部分。基础部分主要包括Python语言的基本语法、数据类型、控制流程、函数等内容;进阶部分则涵盖了Python的高级特性、模块与包、面向对象编程等内容;算法部分主要考察编写判断、循环、递归等算法的能力。 通过下载Python面试题资源,可以更好地了解常见的面试考点和问题,有助于自我评估和提高编程能力。此外,一些面试题还会附带答案和解析,可以对比自己的答案,进一步加深对Python知识的理解。 使用下载的面试题进行练习时,可以尝试按照规定的时间限制来回答问题,模拟真实的面试环境。这样可以提高解决问题的速度和有效性,并培养对压力的适应能力。在处理问题的过程中,可以借助文档和互联网资源来查找相关的知识和方法,同时也要积极思考和整理,以便更好地掌握和运用这些知识。 总之,下载Python面试题可以帮助提升自己的Python编程技能和面试准备能力。通过练习和理解这些面试题,可以更好地应对未来的面试挑战,增加自己的就业竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值