V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
king1101
V2EX  ›  Python

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

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

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

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

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

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

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

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

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

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