zoukankan      html  css  js  c++  java
  • 面试题之基础部分

    a. 为什么要学python?
    - 亲朋/学长 建议
    - 了解:
    - 简单易学
    - 生态圈比较强大
    - 发展趋势:人工智能、数据分析

    b. 谈谈你对Python和其他语言的区别?
    - 解释型
    - python/php
    - 编译型
    - c/java/c#

    - Python弱类型


    c. 数据类型:
    - 字符串
    - 字典
    - 元组
    - 列表
    - 集合
    - collections
    d. 函数
    - 函数参数传递的是什么?
    - def func(a,b=[]):pass
    - lambda 表达式
    - 列表生成式 []
    - 生成器表达式 (for i in range(1))
    - 题:
    val = [lambda :i+1 for i in range(10)]
    val[0]
    data = val[0]()
    print(data)
    - 常见内置函数:
    - map
    - reduce
    - filter
    - zip
    - instance
    - type
    -
    - 生成器、迭代器、装饰器、可迭代对象
    - 迭代器,内部实现__next__方法,帮助我们向后一个一个取值。
    - 生成器,一个函数内部存在yield关键字;v = 函数()。
    应用场景:
    - range/xrange
    - py2: range(100000000),立即创建;xrange(100000000)生成器;
    - py3: range(100000000)生成器;
    - redis获取值
    conn = Redis(...)

    def hscan_iter(self, name, match=None, count=None):
    """
    Make an iterator using the HSCAN command so that the client doesn't
    need to remember the cursor position.

    ``match`` allows for filtering the keys by pattern

    ``count`` allows for hint the minimum number of returns
    """
    cursor = '0'
    while cursor != 0:
    # 去redis中获取数据:12
    # cursor,下一次取的位置
    # data:本地获取的12条数数据
    cursor, data = self.hscan(name, cursor=cursor,
    match=match, count=count)
    for item in data.items():
    yield item
    - stark组件
    xx.html:
    {% for item in data %}
    <p>{{item.k1}} {{item.name}}</p>
    {%endfor%}


    views.py
    def index(request):
    data = [
    {'k1':1,'name':'alex'},
    {'k1':2,'name':'老男孩'},
    {'k1':3,'name':'小男孩'},
    ]

    new_data = []
    for item in data:
    item['email'] = "xxx@qq.com"
    new_data.append(item)

    return render(request,'xx.html',{'data':new_data})

    # ##################################################################
    xx.html:
    {% for item in data %}
    <p>{{item.k1}} {{item.name}}</p>
    {%endfor%}


    views.py
    def gen_data(data):
    for item in data:
    item['email'] = "xxx@qq.com"
    yield item

    def index(request):
    data = [
    {'k1':1,'name':'alex'},
    {'k1':2,'name':'老男孩'},
    {'k1':3,'name':'小男孩'},
    ]

    new_data = gen_data(data)

    return render(request,'xx.html',{'data':new_data})

    - 可迭代对象,一个类内部实现__iter__方法且返回一个迭代器。
    class Foo(object):
    def __iter__(self):
    return iter([11,22,33])
    obj = Foo()

    应用场景:
    - wtforms中对form对象进行循环时候,显示form中包含的所有字段。
    class LoginForm(Form):
    name = simple.StringField(
    label='用户名',
    validators=[
    validators.DataRequired(message='用户名不能为空.'),
    validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')
    ],
    widget=widgets.TextInput(),
    render_kw={'class': 'form-control'}
    )
    pwd = simple.PasswordField(
    label='密码',
    validators=[
    validators.DataRequired(message='密码不能为空.'),
    validators.Length(min=8, message='用户名长度必须大于%(min)d'),
    validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}",
    message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')

    ],
    widget=widgets.PasswordInput(),
    render_kw={'class': 'form-control'}
    )


    form = LoginForm()
    for item in form:
    print(item)

    - 列表、字典、元组

    总结:如果想要让一个对象可以被for循环,那么就需要在当前类中定义__iter__

    - 装饰器,在不改变原函数代码的基础上,在执行前后进行定制操作。
    - 手写
    - 应用场景:
    - flask路由系统
    - flask before_request
    - csrf
    - django内置认证
    - django的缓存

  • 相关阅读:
    python基础(十七、变量进阶
    python基础(十六、变量进阶
    python基础(十五、变量进阶
    python基础(十四、变量进阶
    python基础(十三、综合应用
    MySQL-索引失效原理
    MySQL-忘记密码
    OSI七层模型
    Python-socket通信
    Python-编程小技巧
  • 原文地址:https://www.cnblogs.com/wangkun122/p/9051541.html
Copyright © 2011-2022 走看看