零碎知识

1.常见的数据类型中的方法

  字符串 字典 列表  常用方法

caplitalize
upper
lower
find
rfind
center
ljust
rjust
format
index
strip
lstrip()
rstrip()

append
insert
extend
count
pop
sort
reverse
remove
li[2:5] = [1, 2, 3] = ['HELLO', 1, 3]
li[0:6:2] = ['HELLO', 1, 3]


.get
keys
values
items
pop
update

 

2.lambda表达式

v = lambda x:x+1
result = v(1)  # 2
        
def  v(x):
    return x+1
result = v(1)  

 

3. 三元运算

result = 值1 if 条件 else 值2 
如果条件为真:result = 值1
如果条件为假:result = 值2

 

4.内置函数

map:

遍历序列,对序列中每个元素进行操作,最终获取新的序列。

li = [11, 22, 33]

new_list = map(lambda a: a + 100, li)
li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)


filter:

对于序列中的元素进行筛选,最终获取符合条件的序列

li = [11, 22, 33]

new_list = filter(lambda arg: arg > 22, li)

#filter第一个参数为空,将获取原来序列
 
5.函数参数
def func(a, b=[]):
    b.append(a)
    return b
 
r1 = func(1)
print(r1)      # 1
 
r15 = func(11,[])
print(r15)     # 11
 
r2 = func(2)
print(r2)     # 1,2

 

6.列表生成式和生成器表达式
v1 = [i for i in range(10)]     # 列表生成式  v1 = [i+100 for i in [11,22,33]]
v2 = (i for i in range(10))    # 生成器 边循环 边生成, 内部还没有生成,除非循环  v2 = (i+100 for i in [11,22,33])
 
>>> v2 = (i for i in range(10))
>>> next(v2)
0
>>> next(v2)
1
>>> next(v2)
2
>>> v1 = [i for i in range(10)]
>>> v1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

 

7.列表生成式
   lambda x,y: x*y if x < y else x/y #声明一个匿名函数
   def func():
        return 1
   v = [func for i  in range(10)]
   v = [lambda :1 for i in range(10)]
     v 是什么   v是列表且有10个函数
      v = [lambda x:x+1 for i in range(10)]
            v[0](9)    # 10
  v = [lambda  : i + 1 for i in range(10)]
  print('i:',i) # 9
  print(v) # 10个函数体
  print(v[4]()) # 10

 

    8. 装饰器  ***
使用装饰器可以在函数执行前和执行后添加相应操作。

def wrapper(func):
    def result():
        print 'before'
        func()
        print 'after'
    return result
 
@wrapper
def foo():
    print 'foo'

foo()

# before

  # foo

  # after


        生成器  **
val = (i for i in range(5))

生成器:一边循环一边计算的机制称为生成器 ,通过next()调用下一个元素
只负责生产,只能往前走,不能回退,生产结束时,若在生产,就报错StopIteration

>>> next(val)
0
>>> next(val)
1
>>> next(val)
2
>>> next(val)
3
>>> next(val)
4
>>> next(val)
Traceback (most recent call last):
File "<pyshell#56>", line 1, in <module>
next(val)
StopIteration

        迭代器   *
迭代器对象表示一个数据流,不知道什么时候截止,不能使用len(),直到没有数据抛出StopIteration

迭代器(Iterator):可以被next()函数调用并不断返回下一个值的对象称为迭代器
9.反射
            - importlib
            - getattr
        
10.算法能力
    
 
 11.斐波那契数列  后一个值=前两个的和
def func(max):
    n, a,b=0,0,1
    while n < max:
        print(b)
        a,b =b,a+b
        n+=1
    return "done"

func(10)

1
1
2
3
5
8
13
21
34
55

 

知识

1. 进程 线程 
    一个应用程序就是一个进程,真正的执行单位是线程
    一个进程下面可以开多个线程,线程共享该进程的所有资源。

2. io密集型 计算型 
    在python中一个进程中同一时刻只有一个线程执行用不上多核,有GIL锁。
        # 如果并发的多个任务是计算密集型:多进程效率高
        # 如果并发的多个任务是I/O密集型:多线程效率高
    
3. 创建app
    python manage.py startapp app01
    python manage.py makemigrations
    python manage.py migrate

4.django的app下面有那些文件 
    app:  admin models views tests
    项目:settings url templates static

5.3次握手,4次挥手 
    3次握手    client请求,server同意请求,client同意
    4次挥手 client请求,server同意,server请求,client同意  因为:server有可能还有数据要发送。

6.中间件,你用中间件做了什么?
    登录认证,权限,跨域
    process_request
    process_response
    process_view
    process_exception
    process_template_response(用的比较少)
    
7.索引B+树
    B+树(数据结构,平衡树,根节点,子节点,数据)
    索引能够让数据库查询数据的速度上升,而使写入数据的速度下降,    
    因为平衡树这个结构必须一直维持在一个正确的状态, 
    增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 
    因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,
    也就是为什么索引会给查询以外的操作带来副作用的原因。    
    
8.redis类型,设置时间,取时间
    字符串,集合,列表,字典,有序集合
    expire()设置时间
    conn.set("name", ex=10) ...

9.合并两个列表,去除列表中的重复元素
    a = [12,4,67,45,6]
    b = [4,5,6,8,9]
    print(list(set(a+b)))

10.字符串与列表的转换
    s = "helloworld"
    print(list(s))

    li = ["hello", "world"]
    print(''.join(li))

11.range()xrange()区别
    py2:
        range() 生成的是列表
        xrange() 生成的是一个生成器 
    py3:
        range() 就是一个生成器
        xrange() 没了

12.将下边函数改写成lambda形式(3的倍数)
    list(filter(lambda n : not(n % 3), range(1, 100)))
    [ i for i in range(1, 100) if not(i % 3)]

13.cookie与session区别
    cookie:存储在客户端的
    session:存储在服务器的

14.求出函数的执行时间 利用装饰器
 import time

 def time_fun(func):
     def inner(*args, **kwargs):
         time_start = time.time()
         func(*args, **kwargs)
         time_end = time.time()
         print(time_end - time_start)
     return inner

 @time_fun
 def add(x, y):
     time.sleep(2)
     return x+y

    
15.斐波那契数列(Fibonacci)
 1,1,2,3,5,8,13,21,34,... 除第一个和第二个外,任何一个数都由前两个数相加
 def fun(x):
     n, a, b = 0, 0, 1
     while n < x:
         yield b
         a, b = b, a + b
         n += 1

 res = fun(10)
 for i in res:
     print(i)
 while True:
     print(next(res))

    
16.二分查找
# encoding=utf-8


def binary_search(alist, item):
    """二分查找 非递归方式"""
    n = len(alist)
    start = 0
    end = n-1

    while start <= end:
        mid = (start + end) // 2
        if item == alist[mid]:
            return True
        elif item < alist[mid]:
            end = mid - 1
        elif item > alist[mid]:
            start = mid + 1

    return False


def binary_search2(alist, item):
    """二分查找 递归方式"""
    n = len(alist)
    if 0 == n:
        return False
    mid = n // 2
    if item == alist[mid]:
        return True
    elif item < alist[mid]:
        return binary_search2(alist[:mid], item)
    else:
        return binary_search2(alist[mid+1:], item)


if __name__ == '__main__':
    li = [17, 20, 26, 31, 44, 54, 55, 77, 93]
    # print(binary_search(li, 55))
    # print(binary_search(li, 100))
    print(binary_search2(li, 55))
    print(binary_search2(li, 100))
    

17.django中的Q使用
    SELECT * FROM order WHERE id BETWEEN 20 ADN 100 AND(num <= '20' or num >= '30');
    
    from django.db.models import Q
    from login.models import Order
    #...
    Order.objects.get(
        Q(id >= 20) & (id <= 100),
        Q(num <= 20) | (num >= 30)
    )

    
18.常见的请求头
    - Content-Type   json / url-encode / .
        - User-Agent     请求得设备
        - referer        可以做图片防盗链。
        - Host           当前得域名
        - cookies

19.开发工具命令
    git init
    git add .
    git commit -m "xxx"
    git stash 
    git merge 
    git rebase
    git remote add origin ...
    git clone 
    git pull origin
    git push origin 
        
20.高并发
    高可用,读写分离
    集群分布式
    
21.设计模式
    单例模式
    工厂模式
    生产者 消费者
    抽象工厂

 

 
 
 
 
 
 
posted @ 2018-07-14 17:04  Alice的小屋  阅读(123)  评论(0编辑  收藏  举报