编程中什么是「Context(上下文)」?
最近读Flask的文档,读到很多关于Context(上下文)的术语,如应用上下文,请求上下文等,查阅资料但没有得到理解?有没有比较好的解释?
回复内容:
每一段程序都有很多外部变量。只有像Add这种简单的函数才是没有外部变量的。一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行。你为了使他们运行,就要给所有的外部变量一个一个写一些值进去。这些值的集合就叫上下文。
譬如说在C++的lambda表达是里面,[写在这里的就是上下文](int a, int b){ ... }。
context是environment的snapshot. 你查不到是因为上下文这个东西不是一个具体的东西,上下文在不同的地方表示不同的含义,要感性理解。context其实说白了,和文章的上下文是一个意思,在通俗一点,我觉得叫环境更好。
....
林冲大叫一声“啊也!”
....
问:这句话林冲的“啊也”表达了林冲怎样的心里?
答:啊你妈个头啊!
看,一篇文章,给你摘录一段,没前没后,你读不懂,因为有语境,就是语言环境存在,一段话说了什么,要通过上下文(文章的上下文)来推断。
子程序之于程序,进程之于操作系统,甚至app的一屏之于app,都是一个道理。
程序执行了部分到达子程序,子程序要获得结果,要用到程序之前的一些结果(包括但不限于外部变量值,外部对象等等);
app点击一个按钮进入一个新的界面,也要保存你是在哪个屏幕跳过来的等等信息,以便你点击返回的时候能正确跳回,如果不存肯定就无法正确跳回了。
看这些都是上下文的典型例子,理解成环境就可以,(而且上下文虽然叫上下文,但是程序里面一般都只有上文而已,只是叫的好听叫上下文。。进程中断在操作系统中是有上有下的,不过不给题主说了,免得产生新的问题) 和其他传入对象参数没什么区别。
但是通常使用Context来描述有几个特点:
- 被传入Context的部分(组件),内部需要频繁的获取Context的data和调用function。对context有很强的依赖,实现建立在context的基础上。
- Context会被较为多数部分(组件)所需要,在软件实现部分Context会在某个scene下出现单一实例化,然后被多个部分(组件)实例对象调用。出现局部全局化。
- Context会持有很多状态data。
- Coder习惯,命名选择困难下的胶合产物。
另外 Context的中文翻译是谁想出来的,站出来我保证不打你。 其他语言不知道。
在 Scheme 中完整的表述应该是 e 在 E 中的上下文,其中 E 是一个表达式,e是该表达式的子表达式。
如 (+ 1 2 3) 中有子表达式 2 ,那么 2 在 (+ 1 2 3) 中就有一个上下文。
在 Scheme 中上下文是一个过程(即函数)。
构造这个函数很简单,第一步把子表达式挖掉,用空洞(hole) 占住位置。
(+ 1 ~ 3),~ 表示空洞。
第二步,将上一步的结果用 lambda 包裹起来,得到函数。
(lambda (~) (+ 1 ~ 3))。即为 2 在 (+ 1 2 3) 中的上下文。
同理 (+ 2 3) 在 (/ (+ 2 3) 4) 中的上下文即是函数 (lambda (~) (/ ~ 4))。
上下文有一个性质,用原来的子表达式调用上下文时得到原来的表达式。
((lambda (~) (+ 1 ~ 3)) 2) ;;=> (+ 1 2 3)
((lambda (~) (/ ~ 4)) (+ 2 3)) ;; => (/ (+ 2 3) 4)
因为上下文有这个性质,可以很方便的用上下文来解释 不动点(y 组合子) 和 延续等概念。 在语言学里,语意学(semantics)不包含语境(context),语用学(pragmatics)则考虑到语境对语意的影响。
在编程中,也就是一些编程构件(如函数)需要考虑到当时的编译/运行环境,才能理解它的语意/运行结果。 理解了stateless的概念就不会有疑惑了。 基于会话,每个处理模块的通信需要一个会话识别标识和内容容器内交换,那个就是上下文。 一般来说是想要有个object来保存状态,想不出好的名字然后就叫context了 简单的说就是一个状态,当与其它模块进行交互,其它模块执行完了通知你的时候,通过context你就可以知道在交互之前你的模块是一个什么样的状态,然后你可以按照这个状态做相应的处理。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











React と Flask を使用してシンプルで使いやすい Web アプリケーションを構築する方法 はじめに: インターネットの発展に伴い、Web アプリケーションのニーズはますます多様化および複雑化しています。使いやすさとパフォーマンスに対するユーザーの要件を満たすために、最新のテクノロジー スタックを使用してネットワーク アプリケーションを構築することがますます重要になっています。 React と Flask は、フロントエンドおよびバックエンド開発用の 2 つの非常に人気のあるフレームワークであり、うまく連携してシンプルで使いやすい Web アプリケーションを構築します。この記事では、React と Flask を活用する方法について詳しく説明します。

ゼロから始めて、Flask をインストールし、個人ブログをすぐに構築する方法を段階的に説明します。書くことが好きな人にとって、個人ブログを持つことは非常に重要です。軽量の Python Web フレームワークである Flask は、シンプルで完全に機能する個人ブログを迅速に構築するのに役立ちます。この記事では、ゼロから始めて、Flask をインストールして個人ブログを迅速に構築する方法を段階的に説明します。ステップ 1: Python と pip をインストールする 開始する前に、まず Python と pi をインストールする必要があります

Django と Flask はどちらも Python Web フレームワークのリーダーであり、それぞれに独自の利点と適用可能なシナリオがあります。この記事では、これら 2 つのフレームワークを比較分析し、具体的なコード例を示します。開発の概要 Django はフル機能の Web フレームワークであり、その主な目的は、複雑な Web アプリケーションを迅速に開発することです。 Django は、ORM (オブジェクト リレーショナル マッピング)、フォーム、認証、管理バックエンドなどの多くの組み込み機能を提供します。これらの機能により、Django は大規模なデータを処理できるようになります。

Flask フレームワークのインストール チュートリアル: Flask フレームワークを正しくインストールする方法を段階的に説明します。特定のコード例が必要です。 はじめに: Flask は、シンプルで柔軟な Python Web 開発フレームワークです。学びやすく、使いやすく、強力な機能が満載です。この記事では、Flask フレームワークを正しくインストールする方法を段階的に説明し、参照用の詳細なコード例を提供します。ステップ 1: Python をインストールする Flask フレームワークをインストールする前に、まず Python がコンピュータにインストールされていることを確認する必要があります。 Pから始められます

FlaskvsFastAPI: WebAPI の効率的な開発のための最良の選択 はじめに: 現代のソフトウェア開発において、WebAPI は不可欠な部分になっています。これらは、異なるアプリケーション間の通信と相互運用性を可能にするデータとサービスを提供します。 WebAPI を開発するためのフレームワークを選択する場合、Flask と FastAPI の 2 つの選択肢が大きな注目を集めています。どちらのフレームワークも非常に人気があり、それぞれに独自の利点があります。この記事ではフロリダ州について見ていきます。

コンテキストとは、プログラムが実行されるときの環境や状態情報のことで、変数の値、関数の呼び出しスタック、プログラムの実行場所など、プログラムが対応付けられるようにするためのさまざまな情報が含まれます。さまざまなコンテキストに基づいて決定を行い、対応する操作を実行します。

Django のテンプレート エンジンと Flask の Jinja2 を深く理解するには、特定のコード サンプルが必要です はじめに: Django と Flask は、Python で一般的に使用され、人気のある 2 つの Web フレームワークです。どちらも、動的 Web ページのレンダリングを処理する強力なテンプレート エンジンを提供します。 Django は独自のテンプレート エンジンを使用しますが、Flask は Jinja2 を使用します。この記事では、Django のテンプレート エンジンと Flask の Jinja2 について詳しく説明し、それらの使用法を示す具体的なコード例をいくつか示します。

コンテキストを使用して Go でリクエスト キャッシュを実装する方法 はじめに: Web アプリケーションを構築するとき、パフォーマンスを向上させるためにリクエストをキャッシュする必要があることがよくあります。 Go 言語では、コンテキスト パッケージを使用してリクエスト キャッシュ機能を実装できます。この記事では、コンテキスト パッケージを使用してリクエスト キャッシュを実装する方法を紹介し、読者の理解を助けるコード例を示します。コンテキストとは何ですか? : Go 言語では、コンテキスト パッケージは複数のゴルーチン間を渡す方法を提供します。
