zoukankan      html  css  js  c++  java
  • Python基础理论

    函数是第一类对象:可以当做数据来传

    1.  可以被引用

    2.  可以作为函数参数

    3.  可以作为函数返回值

    4.  可以作为容器类型的元素

    小例子:

    def func1():
        print('func1')
    def func2():
        print('func2')
    dic = {
        'func1':func1,
        'func2':func2,
    }
    func = dic.get('func1')
    func()

    名称空间:名字与值的绑定关系,时刻记得左面有一根竖线,标识着作用域的不同

    何时生效、何时失效,定义名字的方法

    局部空间、全局名称空间、内置名称空间

    作用域:用的时候,查找的范围

    locals()

    glocals(),系统变量__name__, __file__, __doc__

    全局作用域:全局有效,在任何位置都可以被访问到,除非被删除,否则存活到文件执行结束

    局部作用域:局部有效,只能在函数内部被访问,在函数执行结束后,就释放了

    闭包

    1. 定义在函数内部的函数

    2. 该内部函数包含对外部作用域而不是全局作用域的引用

    def func1():
        x = 1
        def func2():
            print(x)
        return func2
    func = func1()
    func()

    特性:携带自己的作用域,先执行。包裹着一层

    应用场景:爬虫、装饰器

    装饰器

    开放封闭原则,对扩展开放,对修改封闭

    什么是装饰器:

    装饰别的东西的工具:

    装饰器本身 ---> 任意可调用的对象,如函数

    被装饰对象 ---> 任意可调用的对象,如函数

    装饰器要遵循的原则

    1. 不修改被装饰对象的源代码

    2. 不修改被装饰对象的调用方式

    即定义和调用都不能修改

    @deco # func = deco(func)
    def func():
        pass
    
    @deco1
    @deco2 
    def func():
        pass
    
    @deco(x) # 装饰器也是函数,(),先调用,拿到结果@res在func的正上方
    def func():
        pass

    迭代器

    迭代:重复上一次过程,每一次迭代都基于上一次执行地结果而继续进行

    如写文档,保存,再修改

    可迭代对象:obj.__iter__方法

    可迭代对象 执行__iter__方法 ---> 迭代器

    迭代器对象:

    obj.__iter__方法

    obj.__next__方法

    为何要有迭代器:

    提供一种不依赖于索引的迭代方式

    如文件、集合、字典都可以被迭代

    # for 循环原理
    for i in obj: 
        pass 
    # 先执行,obj.__iter__方法,再next() 

    迭代器优缺点:

    优点: 

    1.  提供一种不依赖于索引的迭代方式

    2.  内存中只有一个值,节省内存

    缺点:
    1.  无法获取长度

    2.  一次性,只能前进,不能后退

    生成器

    函数体内含有yield关键字,那该函数的执行结果是生成器对象

    生成器对象本质就是迭代器,所以yield的功能是

    1.  把函数的执行结果做成迭代器

    2.  可以返回多次值,而return只能返回一次值

    3.  暂停函数的运行,保存上下文信息

    如模拟管道

    yield 的语句形式: yield 1

    yield的表达式形式:x = yield 

    food = yield food_list    # 暂停、获取send赋值给food、返回food_list

    内置函数

    数值类:

    abs()、round()、divmod()、pow()

    bin()、oct()、hex()

    chr()、ord()

    max()、min()、sum()

    变量判定:

    id()、type()

    数据类型 工厂函数:
    dict()、int()、float()、str()、set()、list()

    功能型函数:

    print()、input()、len()、__import__()、sorted()、reversed()

    enumarate()、range()

    匿名函数相关:

    f = lambda x, y: x+y
    print(f)
    res = f(1,2)
    print(res)
    """
    1. 没有名字,使用完立刻回收
    2. 有参数、有返回值
    3. 场景逻辑简单
    """

    zip()

    max(*args, key=None)

    sorted(*args, **kwargs)

    函数式编程:

    map(func, *iterables)   # func遍历操作可迭代对象

    from functools import reduce

    reduce(function, sequence, initial=None)

    filter(func, *iterables)  # 过滤func为True

    面向对象:

    property()、staticmethod()、classmethod()

    hasattr()、getattr()、setattr()、delattr()

    issubclass()、isinstance()

    super()

  • 相关阅读:
    使用SpringSecurityOAuth2默认实现OAuth2授权示例
    Session与Token认证方式的区别
    OAuth协议简介
    MySQL5.7开启binlog日志,及数据恢复简单示例
    MySQL5.X给远程用户授权
    MySQL5.X安装
    MySQL8.0以上创建用户,并授权远程连接
    退役了
    2019牛客国庆day3-G &CF1238E
    luoguP4197:Peaks(Kruskal重构树+主席树)或者(点分树+离线)
  • 原文地址:https://www.cnblogs.com/jonathan1314/p/7724695.html
Copyright © 2011-2022 走看看