python基础题目~综合

一 python的元类是什么

     __metaclass__ - python一切皆对象.类也是对象的一种.元类是创造类的类,python的内置元类是python 任何定义类的行为(class关键字)都是type实例化的结果

     通过__class__.__class__ 查看类属性最终看到type 一般的类都继承object,那object的父类其实就是type

二 python 深浅拷贝

    普通复制 两者都指向同一内存区域  父类和子类对象修改都会影响

    浅拷贝   复制父类对象不同内存空间,但是两者子类还是指向同一内存空间 子类空间修改会影响

    深度拷贝  复制父类对象和字类对象到不同内存空间,都进行了独立,互不影响

三 GIL  global lock

     python的多线程其实是伪多线程,同一时间只有一个线程在跑,GIL锁定其线程的资源.下一个线程如果想运行,则需要申请GIL锁 只存在于通过C语言实现的Python解释器上

     而python的多进程就没有这个问题.实现了真正意义的并发

    多线程和多进程在理论上都可以用到多核心

四 pyc文件

   当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当python程序运行结束时,python解释器则将PyCodeObject写回到pyc文件中。当第二次执行时.会直接跳过编译阶段.使用pyc文件

   什么情况下会生成pyc文件呢 

   1 单纯的脚本自调用并不会生成pyc文件 单纯的引用已经安装好的模块也不会生成pyc文件(因为已经预编译好了)

   2 调用另一个自定义py文件(函数,类) 会生成pyc文件  也可以可以通过python -m 命令 或者在代码中调用py_compile模块生成

   python2会生成pyc , python3 是 __pycache__/ 下生成

五  常用的状态码

   200 正常 403 禁止访问 401权限问题 404 网页未找到 500 代码错误 301 永久重定向

六 回调函数

   简单来说就是定义一个函数,然后将这个函数的函数名传递给另一个函数做参数(函数指针),以这个参数命名的函数就是回调函数。   回调函数本身是在合适的时机调用处理某些情况,并非立刻就调用  常见的异步处理情况场景处理需要回调函数进行结果处理工作

   下面是一个例子

def my_callbcak(args):
print(*args)
def caller(args, func):
func(args)
caller((1,2), my_callbcak)
七 装饰器
1 作用 也即是好处 就是不改变函数代码情况下,针对函数进行装饰,增加额外的功能
2 最后返回的本体是被装饰的函数对象
3 可以通过语法糖调用,通过语法糖调用之后再定义新函数,这时候调用的新函数就被装饰了
4 不含参数的装饰器只需要被装饰对象即可,参数是函数对象,如果需要额外的外部变量,还需要增加一层函数对象.参数是自定义的变量.换句话说至少三层.无参是至少二层
5 常见的场景 日志记录 登录和权限认证 执行时间统计等通用的场景
6  具体的流程
   1 定义装饰器-装饰器内调用函数体+增加额外功能  2  语法糖调用装饰器 3 定义实体函数 4  调用实体函数
一个带参的登录验证装饰器
   def auth(user_info):
       def decorator(func):
         def wrapper(*args,**kwargs):
           if user_info=='teacther':
              return wrapper(*args,**kwargs)
         else:
              return wrapper结束
      return decorator
 @auth('user_info')
  func 登录
在被装饰内函数用登录调用.这样用户在登录的时候就会多了一个验证身份的作用



原文地址:https://www.cnblogs.com/danhuangpai/p/14963391.html