首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

上下文(context)应该怎么理解,有人说是环境,但总觉得有点模糊

  •  
  •   king1101 · 2018-11-23 09:49:54 +08:00 · 3836 次点击
    这是一个创建于 382 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看 flask 的时候看到两个名词,一个程序上下文,一个请求上下文,都不是很理解。谢谢各位大佬解释一下
    35 回复  |  直到 2018-11-24 00:48:52 +08:00
        1
    mmm159357456   2018-11-23 09:52:04 +08:00 via iPhone   ♥ 1
    我理解为寄存器
        2
    shylockhg   2018-11-23 09:52:27 +08:00
    状态
        3
    PulpFunction   2018-11-23 09:59:57 +08:00
    鱼水的那个啥
        4
    towser   2018-11-23 10:00:46 +08:00   ♥ 2
    英语完形填空需要依据「上下文」理解,和你说的上下文是一个意思。
        5
    liuxu   2018-11-23 10:02:43 +08:00
    母板
        6
    araraloren   2018-11-23 10:10:20 +08:00   ♥ 16
    和当前事物有关联的所有事物的状态集合
        7
    Shynoob   2018-11-23 10:15:38 +08:00
    #6 说的也是我想说的
        8
    Tumblr   2018-11-23 10:17:38 +08:00   ♥ 1
    Context Menu: 右键菜单 ———— 是这样么。。。
        9
    Rizio   2018-11-23 10:32:53 +08:00
    状态机
        10
    MozzieW   2018-11-23 10:35:05 +08:00   ♥ 1
    想起刚看代码的自己...回一下
    举例开始(可能不太恰当): 你怎么评价 XXX? 这个问题问题是没法回复的, 因为 1. 你不知道 XXX 是谁. 2. 你不知道 XXX 做了什么. 如果这句话在看文答题, 此时你就需要去上下文(Context) 找 XXX 相关的信息了. 所以所谓上下文(Context), 就是包含了你问题答案的背景信息的东西.
    回到代码, 同样的, 你要去画一个圆圈. 但是屏幕上有很多个窗口, 你不知道画在哪个窗口上. 但再多个你一个 ContextWindow01, 你就知道是往 ContextWindow01 上面画了. 这个 ContextWindow01 就提供了你画圆圈所需要的信息.
    再扩展一下, Context 只是一个词, 用来表明做一件事需要的背景信息. 用这个的原因是, 做这个事情需要很多信息, 不能一次性提供, 或者不想使用者接触到(封装), 所以直接用一个大的东西把所有条件包成一个了.
    写太长了....好像有点复杂...不过基本可以看懂吧.....
        11
    66beta   2018-11-23 10:37:10 +08:00 via Android
    某个东西的当前环境
        12
    paragon   2018-11-23 10:43:48 +08:00
    你如果搞过 android 应该就明白了
        13
    vipppppp   2018-11-23 10:46:18 +08:00
    #6 正解
    表达了我很想表达但不知怎么表达的东西 = =
        14
    SmartKeyerror   2018-11-23 10:56:19 +08:00   ♥ 1
        15
    Tvan   2018-11-23 10:59:05 +08:00 via iPhone
    情境
        16
    SmartKeyerror   2018-11-23 11:01:52 +08:00   ♥ 1
    行吧,Markdown 的语法竟然发不出来。 解释一下:Flask 的上下文是指当前请求或者 App 对象在其它文件中使用的一种手段。Flask 内部使用 ThreadLocal 所实现的线程隔离栈实现, 如果你写过 Django 或者 SpringBoot 框架的代码, 你就会发现 request 对象是通过函数的参数传递给相关的视图处理函数的, 如果想在视图函数之外来使用该对象, 要么在中间件的位置将其以参数的形式传递到其它地方, 要么使用隔离栈。 在 Flask 中, 每一个请求在进入时, 都会将其压入当前线程的栈中, 那么在该请求的生命周期内, 任意地方都可以将该对象从栈弹出, 做一些额外的动作。 这就是 Flask 上下文的作用
        17
    sutra   2018-11-23 11:03:04 +08:00
    コンテキスト
        18
    SmartKeyerror   2018-11-23 11:08:09 +08:00   ♥ 1
    另外为了上班儿更好的划水, 想再给你解释一下什么是上下文(context)。 这里以 Python 中的 with 关键字为例, 都知道 with 是一个上下文管理器, 以便 with 语句所包含的代码块能够自动的释放资源, 例如文件句柄的关闭, 锁的释放, 等等。 首先既然一个文件句柄能够被关闭, 那么首先该文件就会被打开, 同理, 锁也是一样的, 首先得调用 lock.acquire 对其进行加锁, 然后才能调用 lock.release 方法, 中间是需要同步的业务代码。 那么锁的打开, 关闭, 文件的打开与关闭, 就是上下文, 是我们代码的上下文, 我们需要依托这些资源来做一些事情。 而 with 的存在则是提供给程序员一种更好的管理方式。
        19
    lolizeppelin   2018-11-23 11:18:54 +08:00
    多种语言多种框架里都有类似的上下文概念

    一般用于定位自身从哪里来
        20
    stepfensl   2018-11-23 11:21:00 +08:00
    不知道,但是他总是出现在一个功能的开始。
        21
    azhangbing   2018-11-23 11:24:31 +08:00
    android 里上线文分整个应用的 application 还有就是承载界面的 activity ,每个界面就是一个上线文,去绘制 view 网络请求 之类的
        22
    int64ago   2018-11-23 11:29:39 +08:00
    状态和联系
        23
    vitoaaazzz   2018-11-23 11:30:58 +08:00   ♥ 1
    上下文说白了就是一个对象,并在对象上记录了相关联的状态。

    拿请求来说,不同的请求对象(请求上下文)才能让代码区分出来现在的请求是哪个、请求参数有哪些,请求的状态是什么,应该如何处理该请求等待。

    对应的线程上下文、进行上下文等等,说白了就是对象。

    Context 或者说上下文的命名习惯应该是在早期,面向过程编程时期延续来的,那时没有很明确的对象概念,所以有了上下文的概念,从个人理解来说上下文和对象就是一个东西。
        24
    Mrkon   2018-11-23 11:58:13 +08:00   ♥ 1
    context 是 environment 的 snapshot.
    源自知乎 https://www.zhihu.com/question/26387327

    程序上下文(服务器 内部调用 运行的环境)
    请求上下文( client-server 交互过程 运行的环境)
        25
    kxct   2018-11-23 12:01:13 +08:00
    当前堆栈的信息
        26
    bobuick   2018-11-23 12:33:24 +08:00   ♥ 1
    用人类的语言来说,你就完全理解了。

    计算机里上下文,最开始意思是这样: 妈妈在扫地,这时候外面有快递来了,她去开门拿好快递。回来继续扫地,上下文就是之前扫到哪了,是用啥在扫这些信息,如果不知道这些信息她就不知道从哪继续了。

    请求上下文更像是跟本次请求相关的附加信息,这里用 context 这词其实是很牵强嘛,可是其他也没更好的名字了,就先这么用了。
        27
    dixeran   2018-11-23 12:52:11 +08:00 via Android
    翻了一下 CSAPP:“操作系统保持跟踪进程运行所需的所有状态信息。这种状态,也就是上下文,包括许多信息,比如 PC 和寄存器文件的当前值,以及主存的内容”
    不过上下文这个概念在不同具体框架下指的不是同一个对象
        28
    Mutoo   2018-11-23 12:54:33 +08:00
    如果要理解“上下文”的话,得把它放到具体的语境中,你能提供一下上下文吗。(笑)
        29
    persimmon   2018-11-23 12:56:18 +08:00
    everything that's related to what you're talking about right now
        30
    mf2019d   2018-11-23 13:10:06 +08:00 via iPhone
        31
    loveCoding   2018-11-23 15:15:40 +08:00
    @araraloren #6 表达完美
        32
    jin5354   2018-11-23 15:26:33 +08:00
    #6 的表达太唯心了,我们期望上下文中有『所有关联事物信息』,但实际上下文只包含『程序当前运行所需的状态信息』,不然写码时也不会出现由于作用域限制 xxx 拿不到数据的场景了
        33
    Reficul   2018-11-23 17:45:18 +08:00
    世界的当前状态(雾

    其实一般就是一个巨大的类型不定的 Map,然后运行这行代码的时候从里面扣出来一个不知道啥玩意,算完了再塞回去,从而造成谁也无法维护的编程技巧。
        34
    datou   2018-11-23 18:45:20 +08:00
    @sutra 是 コンテックス 吧?
        35
    ivamp   2018-11-24 00:48:52 +08:00   ♥ 1
    你可以看一下七月的课程《 flask 高级编程》慕课网有,对上下文有深入讲解
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1013 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 22:08 · PVG 06:08 · LAX 14:08 · JFK 17:08
    ♥ Do have faith in what you're doing.