1、请说一说lambda函数的作用:请用lambda和reduce实现1到100的累加

  答:一些简单的需要用函数去解决的问题就可以用匿名函数,匿名函数的函数体只有一行
      reduce(lambda x,y:sum([x,y]),range(1,101))  #吧1传给了x,吧101传给了y,计算除了1-100的和
  回顾一下map函数:
    print(list(map(lambda x,y:sum([x,y]),range(1,101),range(1,101))))  #第一个参数是一个函数,第二个参数是一个序列

2、请描述一下tuple,list,dict,set的特点

tuple: 可以存多个值;不可变数据类型,不可修改,更多是用来查询
list : 可以存多个值;列表是有序的,可以通过索引取值;列表可变数据类型,可以修改
dict : 可以存多个值;字典是无序的,值可以是任意数据类型,key必须是不可变数据类型的
       可变数据类型,可以修改;
set : 可以存多个值;集合和字典一样,也是无序的;可变数据类型,但是里面的元素是不可变数据类型
       set就像是把Dict中的key抽出来了一样,类似于一个List,但是内容又不能重复,通过调用set()方法创建
       去重的作用
       
       set的元素遵循的三个规则:
            - 每个元素是不可变数据类型
            - 没有重复的值
            - 无序
       

3、请说一下staticmethod和classmethod的区别

staticmethod和classmethod的相同点:
    - 1.都可以用类名去调用里面的方法和属性
    - 2.不需要实例化
staticmethod和classmethod的不同点:
    - 静态方法不要要传self了,
    - 类方法必须有一个cls参数表示这个类,可以使用类属性
举例:
    class Foo(object):
        AGE = 18
        def __init__(self,name):
            self.name = name

        @classmethod
        def eat(cls):
            return "我是eat"

        @staticmethod
        def drank():
            return "我是drank"

        def play(self):
            return "玩玩玩"

        def sing(cls):   #没有加类方法或者静态方法的时候是不能用类名去直接调用的,要是掉用也需要随便传个参数,这样也没啥意思,
                        #所以我们可以用装饰器,这样就可以直接用类名去调用了,其实也可以通过实例化对象来调用的,但是用类方法和
                        # 静态方法连实例化都不用了,直接就可以用类名去调用了 ,还会比较推荐用的
            return "唱唱唱"    
单例模式的时候就用到了类方法

4、请说一说迭代器和生成器的理解

- 可迭代对象(iterable):含有__iter__方法,返回一个迭代器
- 迭代器(Iterator):含有__next__方法
- 生成器:含有yield的就是一个生成器,也有__next__,具有迭代特性。
          生成器的好处,就是一下子不会在内存中生成太多的数据
          生成器的本质就是一个迭代器。
- 装饰器:本质是一个闭包函数,

5、请用Python实现单例模式,至少两种方式

单利模式有四种实现方式,分别是:
- 文件导入
- 类实现的
- 基于__new__方法实现的
- 基于metaclass实现的
方式一:
import threading
class Singleton(object):
    _instance_lock = threading.Lock()
    @classmethod
    def inistance(cls,*args,**kwargs):
        if not hasattr(Singleton,"_instance"):  #判断这个对象有没有_instance这个属性,如果没有就常见一个
            with Singleton._instance_lock:
                if not hasattr(Singleton, "_instance"):
                    Singleton._instance = Singleton(*args,**kwargs)
        return Singleton._instance
    def task():
        print(Singleton.inistance())

    for  i in range(5):
        th = threading.Thread(target=task,)
        th.start()
方式二:
import threading,time
class Singleton(object):
    _instance_lock = threading.Lock()
    def __init__(self):
        time.sleep(2)

    def __new__(cls, *args, **kwargs):
        if not hasattr(Singleton,"_instance"):
            with Singleton._instance_lock:
                if not hasattr(Singleton, "_instance"):
                     Singleton._instance = object.__new__(cls,*args,**kwargs)
        return Singleton._instance

# obj1 = Singleton()
# print(obj1)
#
# obj2 = Singleton()
# print(obj2)
def task():
    obj = Singleton()
    print(obj)
for i in range(10):
    th = threading.Thread(target=task)  #说个线程共享一个内存空间,所以会有竞争问题,加吧锁,牺牲效率,保证数据的安全
    th.start()

7、请实现一个装饰器,限制该函数被调用的频率,如10秒1次

import time
def wrapper(func):
    def inner(*args,**kwargs):
        time.sleep(10)
        ret = func(*args,**kwargs)
        return ret
    return inner

@wrapper
def index():
    print("执行我啦")

for i in range(1,4):
    print("第%s次"%i)
    index()
    

8、django的生命周期

- wsgi,中间件,路由,视图(进行ORM操作拿到数据在模板中渲染)
- 你用中间件做过什么?
    - 用户登录
    - 权限管理
    - 日志管理,可以做,但是没必要,以后网站运行起来的时候有个nginx
- 路由需要注意的:一个url对应一个的函数,还可以加正则表达式,在url上一定要加起始终止符
- 视图
    接受请求
        - request.path_info :获取当前的url
        - request.POST
        - request.body
        - request.FILES
        - request.GET
        ....
    返回内容
        render
        HttpResponse
        redirect

9、orm数据库操作

- 13个API
    all,fliter,first,last,get,values,values_list,order_by,distinct,exclude,reverse,count,exits
- 2个:
    join:datalist = models.Userinfo.objects.all().only("name","email")  #拿到的还是一个QuerySet集合,仅仅取name和email
    defer:models.Userinfo.objects.all().defer("name","email") #阻止,不取name和email
- FK

10、什么是可变数据类型,什么是不可变数据类型?

可变数据类型:id不变,value值可以改变
不可变数据类型:value改变,id(内存地址)也跟着改变

 

posted on 2018-02-13 20:55  海燕。  阅读(158)  评论(0)    收藏  举报