9 uwgi相关名词解释、自定制上下文管理器、引用传递

一、wsgi uWSGI uwsgi cgi fastcgi分别是什么?

  1. wsgi(Web Server Getaway Interface,web服务器网关接口),Python Web 应用程序与 Web 服务器之间通用的接口
  2. uWSGI:符合wsgi协议的 Web 服务器,用c语言写的,性能高,处理请求返回响应
  3. uwsgi:uWSGI服务器实现的独有协议

cgi(common getaway interface,通用网关接口)

  1. cgi:服务器与web框架传输数据的标准,所有bs架构的软件都遵循cgi协议
  2. fastcgi:快速通用网关接口,是cgi的增强版,速度更快,NGINX、Apache、Microsoft IIS是符合fastcgi协议

什么是web服务器?
客户端与服务端之间的服务器中间件
NGINX、Apache 做请求转发
uWSGI只针对Python的

二、如何自定制上下文管理器?

  1. 定义
    上下文管理器context manager 是Python2.5开始支持的语法
    如果对象实现了双下enter和exit方法,那么这个对象就可以支持上下文管理器
    实现方式是with关键字,比如with open as f:
  2. 定义
class CodeBlockContext:
    def __enter__(self):
        print("entering code block")

    def __exit__(self, exc_type, exc_value, traceback):
        print("exiting code block")


# 使用上下文管理器
with CodeBlockContext():
    print("this code block is being executed")
  1. 举例
    with open 是非常典型的上下文管理器,用于打开文件的场景 ,
    此外,网络连接、数据库连接、使用锁、使用事务等

三、Python的参数传递是值传递还是引用传递?

  1. 什么是值?什么是引用?
  • 值:一个变量=具体的值=在一块内存地址放着这个变量
  • 引用:一个变量=内存地址=内存地址指向了值
  1. 什么是值传递?什么是引用传递?
  • 值传递:函数中修改了传递的值 不会影响原来的
  • 引用传递:函数修改了传递的引用 就会影响原来的

严格意义上来说,Python的参数传递既不是值传递也不是引用传递
Python有自己的规则,具体规则如下:

  • 如果是可变类型在函数中修改 就会影响原来的变量
  • 如果是不可变类型在函数中修改 就不会影响原来的变量
# 可变类型修改会影响
l=[1,2,43]
def func(a):
    a.append(1)
    print(a)

func(l)  # [1, 2, 43, 1]

# 不可变类型修改不影响
l=[1,2,43]
def func(a):
    a=9
    print(a)

func(l)  # 9

  • 如果是函数里面重新赋值,无论是可变还是不可变类型 都不会影响原来的变量
# 可变类型
l=[1,2,43]
def func(a):
    a=[12,43,24]
    print(a)

func(l)  # [12, 43, 24]


# 不可变类型
l=[1,2,43]
def func(a):
    a=1
    print(a)

func(l)  # 1
posted @ 2023-04-12 16:19  阿丽米热  阅读(44)  评论(0编辑  收藏  举报
Title