Skip to content
tulpar008 edited this page Apr 30, 2015 · 4 revisions

Date: 2015-04-26
Title: Python笔试题  
Tags: Python
Category: IT

1. 什么是装饰器,使用场景是什么?最好能举例说明在你的项目中哪个地方用到过装饰器。

答: 我们要对一个函数(myfunc)进行操作(修改或记录之类的),如下

#方法一:
func = modify(myfunc)
#方法二:
@modify
def myfunc():
    pass

方法一可行,但必须在myfunc已经被定义之后的某处,而且不通用,于是有了方法二:装饰器,使用情景如下:

例1:django中在某一操作前检查用户是否已登陆,如果未登录跳转到登陆页面.伪代码实现如下

def login_required(func):
    if(is_authenticated):
        return func()
    else:
        return login_view()

@login_required
def article_detail(request):
    user = request.user
    ......
    return render("article_detail.html", context)

@login_required
def article_index(request):
    user = request.user
    ......
    return render("article_index.html", context)

例2:在django 中给Model自定义属性

from django.db import models

Class Article(models.Model):
    title = models.CharField(max_length=1024)
    
    @property
    def manifest(self):
        attribute_key_list = ['id', 'title']
        entity_dict = {}
        for key in attribute_key_list:
            entity_dict[key] = self.__getattribute__(key)                                                                            
        return entity_dict
>>> article = Article(title="Hackers and Painters")
>>> article.save()
>>> article.manifest
{'id': 1, 'title': "Hackers and Painters"}

例3:python自带函数也到处使用装饰器,如

class Foo:
    #静态方法走起
    @staticmethod
    def add(a, b):
        print a + b
2. 什么是迭代器,使用场景是什么?最好能举例说明在你的项目中哪些地方用到过迭代器。

答:常见的可迭代对象有list, dict,file, str...... 只要是实现了next()或iter()方法的对象都可以迭代,如:

>>> iterator = iter(range(3))
>>> iterator.next()
0
>>> iterator.next()
1
>>> iterator.next()
2
>>> iterator.__iter__()
<listiterator at 0x7fe6f25f11d0>
>>> for i in iterator:
        print i
0
1
2

迭代器: 访问集合内元素的一种方式. 1. 从第一个元素开始访问,一直到最后一个 2. 只往前访问(这并不算什么缺点,因为很少会有在迭代途中进行回退的操作) 3. 特别适合遍历巨大的文件或无限集合,如几个G的文件.因为它不要求你事先准备好整个迭代过程中所有的元素,仅仅在迭代至某个元素时才计算该元素.而列表是一次性获取所有值的,如果有很多值,列表会占用太多的内存. 2. 请以代码说明你所理解的 Python 中对象的深拷贝和浅拷贝。 3. 按熟悉程度说出你所接触过的 Python web 开发框架。 4. 请简单描述 web 开发框架大概有几个模块组成。

  1. 正则表达式中如何匹配数字?如果匹配单词? 如何匹配行首和行尾?.*?+ 分别都代表什么?

  2. 请说一下你对正则中贪婪模式和非贪婪模式的理解。

  3. 爬取网页时遇到死链该怎么处理?

  4. 按熟悉程度写出你接触过的关系型数据库和 nosql。

  5. 你使用 linux 的频率有多高(桌面环境?开发环境?还是只是玩儿玩儿)

  6. vim 使用:假设在一个文本中有 500 行文字,如果想把第200-300行中的 aaaa 替换成 bbbb 该怎么操作?

  7. 在 vim 中如何查看一个单词在文本中出现的次数?

  8. 你所熟悉的版本控制工具是什么?

  9. 描述一下你说理解的版本控制中的分支的概念。

  10. 描述一下 pull request 开发流程。

  11. 描述一下你自己是如果组织一个项目的代码的。

  12. 说出你在 python 开发中常用的工具。

  13. 请写出你所熟悉或常用的遍历 字典 的方法。

  14. 假如有字符串 s = ‘I am a student’(每个单词以空格分隔),请写一段处理程序,处理后得到字符串 s1 = ‘student a am I’。如果第二个单词和第三个单词之间是两个空格分隔,第三个单词和第四个单词之间以 tab 分隔,怎么实现?

  15. 假如有一张用户数据表(十万行数据,字段为 id, name, ico),要取所有用户信息并打印,请用代码实现。

Clone this wiki locally