用 Podman 在家用电脑搭私人 WebDAV 书签同步服务

环境:Linux Mint 21.x | Podman 4.9 | rootless 模式 目标:开机自启、崩溃自恢复、全浏览器通用、零翻墙。 1. 最终效果 Chrome / Edge / Firefox 通过 Floccus 插件把书签实时同步到 本地 WebDAV。 数据落盘 ~/webdav/data/bookmarks.xbel,完全私有。 使用 Podman Pod + 用户级 systemd 托管,重启后无需登录即可自动拉起。 2. 一键脚本(用户级 systemd) 把下面保存为 ~/bin/webdav-pod.sh 并给执行权限: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #!/usr/bin/env bash set -e POD_NAME=webdav-pod PORT=18080 USER=floccus PASS=$(openssl rand -hex 8) DATA_DIR="$HOME/webdav/data" mkdir -p "$DATA_DIR" echo "PASSWORD=$PASS" # 1. 创建 Pod(rootless) podman pod create --name "$POD_NAME" -p "$PORT":80 # 2. 运行容器(rootless) podman run -d --restart=no --pod "$POD_NAME" \ --name webdav \ -e USERNAME="$USER" \ -e PASSWORD="$PASS" \ -v "$DATA_DIR":/var/lib/dav:Z \ docker.io/bytemark/webdav # 无法拉取镜像需要配置podman国内源 # 3. 生成用户级 systemd 单元 mkdir -p ~/.config/systemd/user cd ~/.config/systemd/user podman generate systemd --name "$POD_NAME" --files --new systemctl --user daemon-reload systemctl --user enable --now "pod-${POD_NAME}.service" 执行: 1 2 chmod +x ~/bin/webdav-pod.sh ~/bin/webdav-pod.sh 3. 浏览器配置(Floccus) 项值 服务器地址http://<电脑IP>:18080/ 用户名floccus 密码脚本输出的 16 位随机串 书签路径bookmarks.xbel 同步策略双向同步,15 min 4. 日常运维(用户级) 1 2 3 4 5 6 7 8 # 看日志 journalctl --user -u pod-webdav-pod -f # 重启 Pod(含内部容器) systemctl --user restart pod-webdav-pod # 备份书签 cp ~/webdav/data/bookmarks.xbel{,.$(date +%F)} 5. 卸载清理(用户级) 1 2 3 4 5 systemctl --user stop pod-webdav-pod systemctl --user disable pod-webdav-pod rm -f ~/.config/systemd/user/{pod,pod-webdav-pod,container-webdav}.service systemctl --user daemon-reload podman pod rm -f webdav-pod 6. 同步插件下载地址 Chrome / Edge: https://chrome.google.com/webstore/detail/floccus-bookmarks-sync/fnaicdffflnofjppbagibeoednhnbjhg Firefox: https://addons.mozilla.org/firefox/addon/floccus/ 整个方案 零依赖云厂商,换电脑/重装系统只需把 ~/webdav/data 备份带走,再跑一遍脚本即可恢复同步。Happy syncing!

2025/10/6
articleCard.readMore

中国校服外包产业与“统一着装”的意识形态机制

> 校服不仅是“一件衣服”,更是把学生身体变成治理载体的日常仪式。本文用 10 分钟梳理 1200 亿市场格局,并拆解学校为何非统一不可的深层逻辑。 1. 产业速写:1200 亿的“蚂蚁市场” 关键指标2024 年数据 在校中小学生≈1.85 亿 年均校服支出662 元/人 年市场容量≈1 225 亿元 注册企业数6 326 家 小微企业占比87 % TOP10 市占率<7 % 一句话总结:千亿赛道、极度分散、地方割据。 1.1 外包链路 头部品牌(伊顿纪德、优卡、乔治白)只做设计 + 质检 + 区域仓储; 生产端九成外包给长三角、珠三角 50~200 人小厂; 招标端以“校本”或“区县”为单位,低价中标 + 本地关系是常态。 1.2 盈利模型 环节毛利率说明 面辅料采购5~8 %量大价低,账期 90 天 加工费10~12 %小厂竞价,无溢价 品牌方25~35 %设计、质检、仓配、渠道 学校回扣10~15 %口头“返点”,现金或卡 2. 学校为何强制统一?——管理、经济与象征的三重算计 管理便利 统一视觉 = 快速识别“本校/外校”,逃课、打架、偷拍事件责任可立即定位。 抑制攀比 把阶层差异压进同质布片里,向家长贩卖“教育公平”幻觉。 象征资本 校服=移动招牌;统一着装率还是文明校园评比硬指标。 3. 意识形态国家机器视角:当衣服成为“治理装置” 借用阿尔都塞(Althusser)的“意识形态国家机器”(ISA)概念,校服每天都在完成以下四项“规训作业”: 3.1 仪式化召唤 > “穿校服→检查→通报不合格” 日复一日的微型仪式,让学生自我确认身份:我是××学校的人,我得服从这套规则。 3.2 可见性与同质化 差异被压到最低,身体变成可计算、可排序、可凝视的“集体客体”,方便老师、摄像头、教育局随时“扫码”。 3.3 时间—空间切片 周一周三周五 礼服+升旗运动服+跑操礼服+降旗 制服把一周切成不同功能块,提前让学生适应科层制的时间管理。 3.4 未来国民的“预制” 立领、肩章、藏青/卡其配色,与军服、公务员制服同构;把“去个性化—服从命令”提前写进身体记忆。 3.5 权力—资本合谋的再生产 当“为了孩子”的口号掩盖了回扣、指定供应商、价格垄断,学生便在无意识中认同并再生产了这套灰色结构。 4. 结论:一件衣服,三重剧本 市场剧本:1200 亿“蚂蚁市场”正从分散走向集中,但地方保护+低价中标仍是最大阻力。 学校剧本:用“管理+公平”当表面理由,实则把身体转化为可治理、可展示的符号资源。 意识形态剧本:作为学校 ISA 的日常装置,校服通过穿衣仪式、同质化视觉、微型处罚,完成了对“未来国民”的身体规训与价值内化。 下次再看到操场上那片蓝白海洋,不妨多想一层—— 不是学生在穿衣服,是衣服在“穿”学生。 参考文献与数据来源 中国服装协会《2024 中国校服产业研究报告》 艾瑞咨询《2025 中国校服行业白皮书》 阿尔都塞《意识形态与意识形态国家机器》,1970 教育部《2024 全国教育事业发展统计公报》 深燃财经《一件校服里的 1200 亿灰色生意》,2024-03-12

2025/9/25
articleCard.readMore

Vue 响应式原理:从 2.x 的 Object.defineProperty 到 3.x 的 Proxy

一张图记住结论: Vue2 = 递归属性劫持(defineProperty) Vue3 = 整体对象代理(Proxy) 1. 为什么要变? 痛点Vue2 表现Vue3 解决 新增/删除属性不能自动触发更新自动追踪 数组下标/length需要重写 7 个变异方法原生语法直接拦截 深层对象初始化时一次性递归,耗时用到哪层代理哪层(懒代理) IE 兼容必须支持 IE9只支持现代浏览器 2. Vue2:Object.defineProperty 时代 2.1 核心思路 遍历 data 所有属性 为每个属性调用 Object.defineProperty 植入 getter/setter 在 getter 中收集依赖(Dep.target = Watcher) 在 setter 中派发更新(dep.notify()) 2.2 最小实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function defineReactive(obj, key, val) { const dep = new Dep(); // 每属性一个管家 Object.defineProperty(obj, key, { get() { if (Dep.target) dep.depend(); // 收集 Watcher return val; }, set(newVal) { if (newVal === val) return; val = newVal; dep.notify(); // 通知所有 Watcher } }); } 2.3 缺陷 属性必须在初始化时就存在,否则需要 Vue.set 数组索引直接修改无法追踪 深层对象一次性递归,启动慢 3. Vue3:Proxy 时代 3.1 核心思路 不再操作属性,而是代理整个对象 new Proxy(target, handler) 拦截 13 种操作 依赖收集用 WeakMap + Map 做全局缓存(targetMap) 懒代理:只有访问到深层对象时才返回新的 Proxy 3.2 最小实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 const targetMap = new WeakMap(); function reactive(obj) { return new Proxy(obj, { get(target, key, receiver) { const res = Reflect.get(target, key, receiver); track(target, key); // 收集 return isObject(res) ? reactive(res) : res; // 懒递归 }, set(target, key, val, receiver) { const oldVal = target[key]; const hadKey = hasOwn(target, key); const result = Reflect.set(target, key, val, receiver); if (!hadKey) trigger(target, key, 'add'); else if (oldVal !== val) trigger(target, key, 'set'); return result; }, deleteProperty(target, key) { const hadKey = hasOwn(target, key); const result = Reflect.deleteProperty(target, key); if (hadKey) trigger(target, key, 'delete'); return result; } }); } 3.3 优势 新增/删除属性自动追踪,无需 Vue.set 数组索引、length 直接拦截 启动快,内存占用低 可拦截 in、for...in、Object.keys 等 13 种操作 4. 一张脑图总结 1 2 3 4 5 6 7 8 9 10 11 12 13 Vue2 响应式 ├─ 入口:new Vue() → initState() → initData() ├─ 遍历 data → observe(obj) → new Observer() ├─ 为每个属性 defineReactive → getter/setter ├─ Dep 管理依赖,Watcher 订阅 └─ 缺陷:新增属性、数组索引、深层递归 Vue3 响应式 ├─ 入口:createApp() → setup() → reactive() ├─ 一次性 new Proxy() 代理根对象 ├─ track() 收集,trigger() 派发 ├─ WeakMap 全局缓存,懒代理 └─ 解决 Vue2 所有盲区,性能更好 5. 面试一句话回答 “Vue2 通过 Object.defineProperty 递归属性实现数据劫持,新增/删除属性无法自动响应; Vue3 改用 Proxy 整体代理对象,能拦截 13 种操作,新增/删除属性、数组索引均可自动追踪,且采用懒代理策略,启动更快。” 6. 延伸阅读 Vue2 源码笔记 - src/core/observer Vue3 源码笔记 - packages/reactivity MDN: Proxy

2025/9/25
articleCard.readMore

赛里斯教育臃肿、企业文化与社会不平等的结构性困境

以下从丝绸国制度逻辑、资源分配、社会流动性和文化心理四个维度做一个系统梳理: 一、教育制度之“臃肿”:不是人浮于事,而是权力结构叠床架屋 赛里斯教育的核心问题并非“人多”,而是行政发包制+政治锦标赛双重机制下,教育系统被异化为政绩生产装置: 指标化生存:上级以“名校率”“达线人数”考核学校,基层教委与学校合谋,将资源集中在少数“样板校”,制造“均衡”假象,实质加剧校际差距。 教师轮岗流于形式:政策本意是平衡师资,但地方执行时象征性调动少数教师,师资不均衡未改变,反而强化了“好学校”的稀缺预期。 权力结构倒置:校长具有行政级别,参与政治锦标赛,教育逻辑让位于官僚逻辑——“育人”成为“育指标”,学生成为数据燃料。 这种制度臃肿的本质,是国家权力过度渗透教育,导致系统内部层层加压、资源错配、创新衰竭。 二、企业文化与社会现状:绩效主义+关系资本的双重绞杀 赛里斯企业文化并非简单的“狼性”或“内卷”,而是绩效主义与关系资本主义的混合体: 绩效主义:KPI、OKR、361制度(阿里)等工具将劳动关系转化为可量化的剥削合约,员工被异化为“人力资产”,而非“人”。 关系资本主义:晋升、融资、订单往往取决于非正式关系网络(校友、同乡、政商关系),导致能力边际收益递减,信任成本极高。 社会信任塌陷:当“潜规则”成为显规则,制度性说谎成为生存策略(如数据造假、PPT造车、估值注水),社会协作成本指数级上升。 其结果是:绩效主义制造焦虑,关系主义制造犬儒,年轻人“躺平”或“考公”是对这种文化的理性退出。 三、基尼系数高:不是“贫富差距”,而是“阶层板结” 根据世界银行等机构数据,赛里斯基尼系数长期在0.46-0.48之间,高于欧美主流国家(0.3-0.35),且财富集中度比收入集中度更惊人: 顶端1%家庭占有约30%财富,而底层50%仅拥有约7%; 教育成为阶层再生产工具:城市家庭教育支出是农村的2倍以上,“鸡娃”本质是购买阶层保险; 社会流动性下降:QS前100高校中,农村学生比例从2010年的12%降至2020年的6%,“知识改变命运”通道收窄。 更严峻的是,不平等已从经济领域蔓延至信息、健康、司法、甚至情感(如“情感劳动”的市场化),形成“多极叠加”的系统性排斥。 四、文化心理:从“勤劳致富”到“躺平主义”——合法性的流失 当制度无法提供“努力-回报”的正向预期,社会心理会发生三重突变: 从奋斗到犬儒:年轻人发现“996”换不来首付,反而换来甲状腺结节,“努力”被祛魅。 从集体到原子化:传统宗族、单位、社区瓦解,“悬浮社会”(项飙语)下,个体成为“断根人”,孤独成为流行病。 从希望到防御性生存:考公、考研、买黄金、不婚不育,本质是退出高风险游戏,转向低欲望防御。 这种心理变迁的临界点,不是“贫穷”,而是“无意义”——当系统无法给出“我为什么值得这样活”的答案时,合法性危机就会从教育、职场、婚姻等日常领域爆发。 五、小结:系统臃肿不是“管理问题”,而是权力-资源-话语的三重垄断 赛里斯的困境,本质是一套高度成熟的“汲取-分配-合法性”系统: 汲取:通过土地金融、廉价劳动力、数据垄断抽取剩余; 分配:以“项目制”“指标制”层层分包,制造稀缺性以维持控制; 合法性:用“发展主义”“民族主义”叙事遮蔽结构性不平等,直到叙事失效。 因此,“臃肿”不是效率问题,而是权力结构的生存策略——系统越不透明,寻租空间越大;越不平等,对控制的依赖性越强。 六、一点展望:系统会崩溃吗? 短期内不会。因为: 技术维稳(人脸识别、大数据、信用系统)大幅提高了镇压效率; 全球资本仍需要赛里斯作为“稳定的高压低人权”生产基地; 中层阶级仍在“考公-买房-鸡娃”的 内卷循环中提供税基和秩序。 但长期看,人口塌陷、信任耗竭、文化真空三者叠加,可能导向一种“低能量稳态”——不革命,也不发展,而是长期的、缓慢的、无痛的腐烂。

2025/9/25
articleCard.readMore

C语言学习(帕斯卡三角)

C语言学习(帕斯卡三角) 关于帕斯卡三角,不做过多论述,可以先查看百度百科以及leetcode。我将演示几种常用方法打印帕斯卡三角。相较于官方题解我会写的更加易懂,便于读者学习。 解法1,使用数组存储每一列(如果你没有学习过组合数学,这是一种常用解法) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include <stdio.h> #define MAX 10 int main() { int pascal[MAX][MAX] = {0}; // 初始化二维数组,用于存储帕斯卡三角的每一行 int rows, i, j; printf("Enter the number of rows: "); scanf("%d", &rows); // 计算并存储帕斯卡三角的每一行 for (i = 0; i < rows; i++) { pascal[i][0] = 1; // 每行的第一个数是1 pascal[i][i] = 1; // 每行的最后一个数是1 for (j = 1; j < i; j++) { pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]; // 每个数是上一行相邻两数之和 } } // 打印帕斯卡三角 for (i = 0; i < rows; i++) { // 打印前导空格,使三角形居中 for (j = 0; j < rows - i; j++) { printf(" "); } // 打印每行的数字 for (j = 0; j <= i; j++) { printf("%4d", pascal[i][j]); } printf("\n"); } return 0; } 另附leetcode的官方题解: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 int** generate(int numRows, int* returnSize, int** returnColumnSizes) { int** c = malloc(numRows * sizeof(int*)); *returnSize = numRows; *returnColumnSizes = malloc(numRows * sizeof(int)); for (int i = 0; i < numRows; i++) { (*returnColumnSizes)[i] = i + 1; c[i] = malloc((i + 1) * sizeof(int)); c[i][0] = c[i][i] = 1; for (int j = 1; j < i; j++) { // 左上方的数 + 正上方的数 c[i][j] = c[i - 1][j - 1] + c[i - 1][j]; } } return c; } /* 作者:灵茶山艾府 链接:https://leetcode.cn/problems/pascals-triangle/solutions/2784222/jian-dan-ti-jian-dan-zuo-pythonjavaccgoj-z596/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 */ 解法2,使用二项式系数公式单独计算每一个值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <stdio.h> // 函数声明 int binomialCoeff(int n, int k); int main() { int rows, coef; // 获取用户输入的行数 printf("Enter the number of rows: "); scanf("%d", &rows); // 打印帕斯卡三角形 for (int i = 0; i < rows; i++) { // 打印空格以对齐三角形 for (int space = 1; space <= rows - i; space++) printf(" "); // 计算并打印每一行的二项式系数 for (int j = 0; j <= i; j++) { coef = binomialCoeff(i, j); printf("%4d", coef); } printf("\n"); } return 0; } // 函数定义:计算二项式系数 C(n, k) int binomialCoeff(int n, int k) { int res = 1; if (k > n - k) k = n - k; for (int i = 0; i < k; ++i) { res *= (n - i); res /= (i + 1); } return res; } 解法3,基于解法2,我们也许还可以用递归来写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include <stdio.h> // 函数声明 void printPascalTriangle(int rows, int row); int binomialCoeff(int n, int k); int main() { int rows; // 获取用户输入的行数 printf("Enter the number of rows: "); scanf("%d", &rows); // 从第0行开始打印 printPascalTriangle(rows, 0); return 0; } // 使用递归打印帕斯卡三角形 void printPascalTriangle(int rows, int row) { // 递归的基本情况:当行数超过输入的行数时停止 if (row >= rows) return; // 打印空格以对齐三角形 for (int space = 0; space < rows - row - 1; space++) { printf(" "); } // 计算并打印每一行的二项式系数 for (int j = 0; j <= row; j++) { printf("%4d", binomialCoeff(row, j)); } printf("\n"); // 递归打印下一行 printPascalTriangle(rows, row + 1); } // 函数定义:计算二项式系数 C(n, k) int binomialCoeff(int n, int k) { int res = 1; if (k > n - k) k = n - k; for (int i = 0; i < k; ++i) { res *= (n - i); res /= (i + 1); } return res; }

2024/11/10
articleCard.readMore

C语言学习(long和char强制类型转换)

C语言学习(long和char强制类型转换) 在不同的计算机架构中,数据的存储方式可能不同。大端(Big-endian)和小端(Little-endian)是两种常见的字节序。在大端系统中,数据的高位字节存储在内存的低地址端,在小端系统中,数据的低位字节存储在内存的低地址端。由于long类型通常占用4字节(32位,linux64下占用八字节,不影响本文通用性),而char类型占用1字节(8位),在强制转换时,只有long的最低8位会被转换为char。这意味着除了最低8位之外的其他位将被丢弃。如果long类型的值是负数,那么在转换为char时,符号位会被扩展。在大多数情况下,这会导致char类型的值变成一个负数,但由于char类型通常以无符号数处理,所以这个负数会被解释为一个正数。 示例如何将long类型转换为char类型: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main() { long l = 0x12345678L; // 一个示例的long值 char c; // 强制类型转换,只取l的最低8位 c = (char)l; // 打印结果 printf("The long value: 0x%lX\n", l); // long十六进制输出 printf("The char value: 0x%X\n", c); // 格式化char打印x,在 ASCII 编码中,字符 x 的十进制值是 // 120,十六进制值是 0x78,在小端系统中的最低字节就是0x78 printf("The char(char) value: %c\n", c); // 强转后的char格式化输出,即十六进制数0x78的ASCII编码 printf("The char(int) value: %d\n", c); // 因为 128 超出了 char 类型的最大值 127。在这种情况下,128 // 会被解释为 -128 return 0; } 输出: 1 2 3 4 The long value: 0x12345678 The char value: 0x78 The char(char) value: x The char(int) value: 120 在这个例子中,long类型的值0x12345678L只有最低8位0x78被转换为char类型。如果long是负数,那么转换的结果将取决于编译器如何处理符号扩展。这种转换可能会导致数据丢失,因此在实际编程中,如果需要处理大量的数据,应该使用足够大的数据类型来避免丢失重要的信息。 十六进制数通常用来表示无符号整数。然而,如果你想要表示一个负数,你需要使用一个有符号的整数类型,比如int或long。在C语言中,负数通常使用二进制补码形式来表示。在十六进制中表示负数时,你通常会看到一种表示方法,即在十六进制数前加上负号(-)来表示它是负数。但是,这并不是一个真正的十六进制表示,因为十六进制数本身并不包含符号信息。符号是由变量的类型和上下文决定的。 例如,如果你有一个int类型的变量,并且你想要给它赋一个十六进制表示的负数值,你可以这样做: 1 2 3 4 5 6 7 #include <stdio.h> int main() { int num = -0x1A3F; // 表示一个负数 printf("The value of num in decimal: %d\n", num); return 0; } 在这个例子中,-0x1A3F是一个负数,它的值是-0x1A3F的二进制补码表示。printf函数会根据int类型来解释这个值,并打印出它的十进制表示。负数在ASCII编码中没有对应的字符,所以在转换成char类型时会显示乱码。 如果你想要在十六进制中表示一个负数的二进制补码形式,你需要知道这个数的位宽。例如,如果int是32位宽,那么-0x1A3F的二进制补码表示可能是0xFFFFFFFFFFFFE5C1(这个值取决于0x1A3F的二进制表示和整数的位宽)。 在实际编程中,通常不需要手动计算二进制补码形式,因为编译器会自动为你处理这些细节。你只需要使用负号和十六进制数来表示负数即可。 long类型的变量l被初始化为 128,其二进制表示是 10000000。当这个值被强制转换为 char 类型时,由于 char 是有符号的,并且只能表示 -128 到 127 的范围,所以 128 的二进制表示 10000000 被解释为 -128,-128 的二进制表示被符号扩展到 long 类型,结果为 4294967168(十六进制0xFFFFFF80 即char 类型中 128 的二进制补码表示,符号扩展的意思是,最高位(符号位)的值会被复制到新类型中所有高位上)。 1 printf("The char(long) value: %ld\n", c); // 输出4294967168 反之,因为 0xFFFFFF80 二进制的最高位是 1,所以它表示一个负数。当我们将这个 char 值转换为 long 类型时,符号位(即 1)会被复制到 long 类型的所有高位上,直到填满整个 long 类型的位宽。 1 printf("The char(long) value: %ld\n", (long)c); // 强制类型转换了变量c,输出-128

2024/10/14
articleCard.readMore

意识形态国家机器(AIE)笔记

什么是意识形态国家机器(AIE)呢? 阿尔都塞《意识形态和意识形态国家机器-研究笔记(1970)》节选 ​一定不能把它们与(镇压性)国家机器混为一谈。别忘了在马克思主义理论中,国家机器(AE)包括政府、行政机关、军队、警察、法庭、监狱等等,它们构成了我今后要称作镇压性国家机器的东西。“镇压性”意味着上述国家机器是“通过暴力发挥功能”的——至少最终会是这样(因为镇压也可以采取非肉体的形式,比如行政压制)。   我所说的意识形态国家机器是这样一些现实,它们以一些各具特点的、专门化机构的形式呈现在临近的观察者面前。我给这些现实开出了一个经验性的清单,它显然还必需接受仔细的考察、检验、修改和重组。尽管有这种需要包含着的所有保留意见,我们暂时还是可以把下列机构看成是意识形态国家机器(我列举的顺序没有任何特殊的含义):   ——宗教的AIE(由不同教会构成的制度),   ——教育的AIE(由不同公立和私立“学校”构成的制度),   ——家庭AIE,   ——法律的AIE,   ——政治的AIE(政治制度,包括不同党派),   ——工会AIE,   ——传播AIE(出版、广播、电视等等),   ——文化的AIE(文学、艺术、体育等等)。    我说过,AIE不能与(镇压性)国家机器混为一谈。那么,是什么构成了它们的区别呢?   第一点,很明显,(镇压性)国家机器只有一个,而意识形态国家机器却有许多。即使我们假定存在着一个由许多AIE构成的统一体,这个统一体也不是直接可以看到的。   第二点,很明显,统一的(镇压性)国家机器完全属于公共领域;与之相反,绝大部分的意识形态国家机器(它们显然是分散的)是私人领域的组成部分。教会、党派、工会、家庭、某些学校、大多数报纸、各种文化投机事业等等,都是私人性的。   我们可以暂时不管第一点。但一定会有人对第二点提出疑问,问我凭什么把大部分不具有公共地位而完全只是私人性质的那些机构看成是意识形态国家机器呢?作为一个清醒的马克思主义者,葛兰西早已用一句话堵住了这种反对意见。公私之分是资产阶级法律内部的区分,在资产阶级法律行使“权威”的(从属)领域是有效的。而国家领域避开了这种区别,因为国家“高于法律”:国家是统治阶级的国家,既不是公共的,也不是私人的;相反,国家是公共与私人之间一切区分的前提。从意识形态国家机器出发,我们也可以这样说。它们在“公共”机构还是“私人”机构中得到实现,这并不重要,问题在于它们如何发挥功能。私人机构完全可以作为意识形态国家机器“发挥功能”。对任何一种AIE进行彻底的理性分析,都能证明这一点。   现在谈一下什么是根本的东西。区分开AIE与(镇压性)国家机器的基本差别是:镇压性国家机器“运用暴力”发挥功能,而意识形态国家机器则“运用意识形态”发挥功能。   我可以修改一下这个区分,把问题说清楚。我应该说,任何国家机器,无论是镇压性的,还是意识形态的,都既运用暴力也运用意识形态发挥功能,但有一个非常重要的区分,使我们绝对不能把意识形态国家机器与(镇压性)国家机器混为一谈。   这个事实就是,(镇压性)国家机器大量并首要地运用镇压(包括肉体的镇压)来发挥功能,而辅之以意识形态。(根本不存在纯粹的镇压性机器。)例如,军队和警察为了确保它们自身的凝聚力和再生产,也要凭借它们对外宣扬的“价值”,运用意识形态发挥功能。   以同样的方式,只是必须反过来说,意识形态国家机器就其本身而言大量并首要地运用意识形态发挥功能,但是,即使在最后关头(也只有在最后关头),它们也会辅之以镇压——这种镇压是相当削弱和隐蔽的,甚至是象征性的。(根本不存在纯粹的意识形态机器。)例如,学校和教会就使用适当的处罚、开除、选拔等方法,既“规训”它们的牧人,也“规训”它们的羊群。家庭如此……文化的AIE(尤其是审查制度)等等也是如此。   (镇压性)国家机器或意识形态国家机器按各自的情况(首要地或辅助性地)运用镇压或意识形态的双重方式 “发挥功能”,这一决定因素可以说明(镇压性)国家机器和意识形态国家机器相互作用所交织成的非常微妙、或明或暗的各种结合形式——这一点还有必要再说吗?日常生活给我们提供了无数这样的例证,但是,如果我们打算再进一步,而不是停留在这种单纯的观察上,就必须对它们进行详细的研究。      不过,这番评论使我们接近于了解到,是什么构成了在表面上极不相同的那些AIE的统一体。如果说AIE大量并首要地运用意识形态发挥功能的话,那么正是这种发挥功能的方式把它们的多样性统一了起来,因为它们赖以发挥功能的意识形态本身,不管如何多样,如何矛盾,事实上总是统一在占统治地位的意识形态底下的,这种占统治地位的意识形态就是“统治阶级”的意识形态。考虑到“统治阶级”通常在事实上会(公开地,或者更多地借助于阶级或阶级的某些部分之间的联盟)掌握国家政权,因而能够任意支配(镇压性)国家机器,我们就应该承认这个统治阶级事实上在意识形态国家机器中同样握有主动权,因为最终总是占统治地位的意识形态在意识形态国家机器里(恰恰是在它内部的矛盾中)获得了实现。当然,在(镇压性)国家机器里运用法律和政令来行事和在意识形态国家机器里通过占统治地位的意识形态这个中介来“行事”,这是非常不同的事情。我们应该仔细研究这种不同——但是,它掩盖不住具有深刻同一性的现实。就我所知,任何一个阶级如果不在掌握政权的同时对意识形态国家机器并在这套机器中行使其领导权的话,那么它的政权就不会持久。我只需要一个例子来证明这一点:列宁忧心忡忡地惦念着教育(及其它)意识形态国家机器的革命化,只是为了让已经夺取国家政权的苏维埃无产阶级能够保证未来的无产阶级专政和向社会主义过渡。      后面这点说明使我们可以了解到,意识形态国家机器也许不只是阶级斗争(往往是表现出激烈形式的阶级斗争)的赌注,还是阶级斗争的场所。掌握政权的阶级(或阶级联盟)在AIE中不能像在(镇压性)国家机器中那样轻易地制定法律,这不仅是因为以往那些统治阶级能够在那里长时间地保持牢固的立场,而且也因为被剥削阶级的抵抗能够利用那里的矛盾,能够通过斗争攻克那里的战场,从而在那里找到表现自己的手段和机会。   我来概括一下自己的论述。   如果我提出的论点是言之有据的,那么它就可以把我带回经典的马克思主义国家理论,使之在某一方面更加准确。我主张,必须把国家政权(及其被……占有)与国家机器两者区分开来。但我还补充了一点,即国家机器包括两类:一类是代表镇压性国家机器的机构;另一类是代表那些意识形态国家机器的机构。   但如果真是这样,那么一定会有人提出下列问题,甚至是采用对我的意见进行概括的方式:意识形态国家机器究竟的在什么范围内起作用的?它们的重要性是以什么为基础的?换句话说,这些不运用镇压而运用意识形态发挥功能的意识形态国家机器,它们的“功能”是跟什么相一致的呢? 解读 意识形态国家机器的作用范围和重要性基于阿尔都塞的理论框架,这一框架强调了意识形态在维护阶级统治中的核心作用。根据阿尔都塞的观点,意识形态国家机器不仅包括传统的政治、法律和军事机构,还包括教育、家庭、宗教等社会结构和实践领域。 意识形态国家机器的重要性基于其对个体意识和社会意识的影响能力。阿尔都塞认为,意识形态是一种表象体系,它体现了人们在日常生活中对周围世界的无意识体验,并通过这种体验构建了一个具有理性意识的主体幻觉。这种表象体系不仅为资本主义生产关系的再生产提供了必备条件,而且通过文化霸权理论(也就是那个掌握政权的阶级的霸权),确保了统治阶级的思想和价值观能够在社会中占据主导地位。 意识形态国家机器的功能与维护统治阶级的利益紧密相连。它们通过塑造和传播符合统治阶级利益的意识形态,实现对生产关系的再生产,从而让现有的统治秩序得以延续。这种功能的实现不仅仅依赖于直接的政治压迫或暴力手段,而是更多地依赖于意识形态的力量,即通过教育、媒体、宗教等非直接强制手段影响人们的意识形态和行为模式。 由于在AIE中存在各种阶级意识形态的矛盾,无产阶级的代言人能有机会在AIE中找到自己的机会,从而在意识形态领域进行斗争,其实这一点也就是造就了今天中文互联网的乱象。但在所谓的“公共领域”依然是统治阶级意识形态占据主导地位。 总结 By chatgpt 意识形态国家机器在维护和再生产统治阶级的利益方面发挥着至关重要的作用。它们通过传播和强化特定的意识形态,影响个体和社会的意识,从而在不直接使用暴力的情况下,实现对社会的控制和统治。这一过程不仅涉及到政治、经济领域,也深入到教育、文化、宗教等多个社会生活的层面。 没想到我现在还没完全想出来的东西,阿尔都塞早在几十年前就写了出来,今天的左派真应该学习阿尔都塞,这里再借个图便于学习: 也可以看看这位大佬的文章,写的很用心: https://zhuanlan.zhihu.com/p/665154653

2024/4/28
articleCard.readMore

论阶级革命

论阶级革命 为什么革命? 一切历史都是阶级斗争的历史,这是一直是我们认为正确的观点。 因此我们可以将革命的发生归于阶级的矛盾,而革命的发生源于一个阶级对于其对立阶级的矛盾不断加深,于是就发生了一场一个阶级要推翻另一个阶级的革命。 我们的社会有时会因为政治的变革而产生政治运动,这些运动表现了人民的诉求,但往往不具备革命性,但是存在推进革命到来之进程的作用。这种矛盾在现代社会常表现于经济层面,如债务的积累,或者物价的上涨导致无产阶级无从消费,等等这样以各种形式爆发的经济危机。因此,在上世纪人们饱受资本主义毒害的时代,一群有志青年发起了革命运动来夺取政权,这些涉及到社会根本结构的革命才是阶级的革命,是社会的革命,是真正的革命。往往不改变社会基本运行的我们都不能称之革命,而只是单纯的政权更替而已,或者说是像中国历史上的权贵阶级的互相更替而已。 归根结底,一切革命都必须是社会的革命,以社会的基本变革为基础;否则便不成其为革命,只有改换政府而已。 ——宋庆龄 革命的表现形式 马哲告诉我们物质之间的矛盾都是对立且统一的,这些革命的阶级性也告诉我们这些阶级之间的矛盾是不可调和的。既然理说不通,而暂时占据优势的阶级又掌握暴力武器,那么暂时弱势的阶级也就只好用尽一切手段,就像毛主席说的要团结一切可以团结的力量,同样使用暴力武器发起革命。 也就诞生了毛主席的著名论断——”枪杆子里出革命“。 革命不是请客吃饭,不是做文章,不是绘画绣花,不能那样雅致,那样从容不迫,文质彬彬,那样温良恭俭让。革命是暴动,是一个阶级推翻一个阶级的暴烈的行动。 ——《湖南农民运动考察报告》 革命的目的 革命是一个阶级改造世界的运动,今天我们常说的左派被称为激进派,这多少在讽刺试图改变阶级命运的人们,“专家”们总认为他们是理想主义者,其实这也能看作是另一阶级保守势力与之的对立,也因此历史的发展是螺旋式上升的,而不是一蹴而就的。通俗来说,革命的目的就是摧毁旧世界,创造一个更加先进的新世界取而代之。

2023/3/22
articleCard.readMore

论亲情

亲情 引入 如今四、五世同堂那样的大家庭制早已四分五裂,一般家庭多属父母及未成年子女共三、五口人的小家庭制。但是,就连这样简单的家庭模式亦难以久持。 中学作文里常常写到种种父母长辈之情感,却不知今天这种话情感早已随着资本主义的洪流变得一再低落。 那些望子成龙之辈多少受到唯心主义的影响,由于哲学教育的落寞,今天赛里斯的孩子们往往是被这种异化的亲情无时无刻影响着。由此诞生了这些”鸡娃“的家庭,这难道不是有一种威权式的意识形态压迫吗? 怎么样? 曾经的无政府主义者们激进地提出了要消灭家庭,也就是主张消灭国家、消灭家庭、消灭宗教的“三无主义”。这无疑是不符合物质社会的客观发展规律的,尽管这种资本主义下的家庭形态必定被消灭。 别激动着反对我,大多数时候,眼前的亲情还是会带给人一些欣慰的。每每想到父亲和母亲早出晚归的身影也总能感到一些不可思议的情感。其实这也很好理解,这是人类骨子里的东西,这又何尝不是一种美好的情感呢?善待他人,接受自我的存在。 也许你会想到古往今来的那些大义灭亲的故事,这难道可以解释成什么大逆不道吗?无非是一些自我价值实现以及为了得到大他者的认同而牺牲了资本主义社会下逐渐单薄了的亲情而已。这样看来,一众欧洲权贵推崇的自由也就不再那么难以理解了,本质上只是有利于个体的社会竞争力而已。今天丝绸国的权贵者又何尝不是如此呢?给予儿女生活上的一些自由也无非是助长社会竞争力,谋求孩子学习新自由主义之风,便于今后适应欧洲文化而已。当然,在无产阶级家庭,更多的是异化家庭对于独生子女的压迫在今天最为常见。 怎么办? 今天,经过以上论述,也能推断很多孩子正在遭受这样的家庭教育,尽管这样的亲情并不会发生变化,但往往这样的亲情反而会催生更多的意识形态压迫。那么作为知识分子该如何反对这些家庭意识形态包办体系呢? 前阵子,我放假空闲时就喜欢和父亲一起读毛选,也正是我的这些小举动,改变了我的家庭结构。 很久以前,我家的家庭关系还是无比令人感到焦虑的。无论是事业还是教育,都是令当今无产家庭无比头疼的问题。但是如果你真的想摆脱这样家庭威权之暴力,可能只有向家人传播无产阶级的世界观了。

2023/3/4
articleCard.readMore

论盲目

论盲目 这场淘金热绑架了人们,以至于人们沉醉其中,以至于忘记了自己在做什么。 人们不再大谈理想, 人们不断走向虚无, 还有多少色彩可以填充飘渺的人间呢? 写一篇文章,坐下来小歇,尤其是我喜欢的。但是我们又何曾不是盲目的呢?有人执着于支配,有人执着于安逸,有人执着于自由。形而上学的说,人又为什么不是善于选择的呢?我们既生于此又有什么资格说人是趋利避害的生物呢? 的确,人是社会的人,我无数次尝试脱离构成这一切的复杂选择之集合。读了很多书,见了不同的人,回头一看,自己依然困在所谓的“阶级”和“游戏”之中。即使是信仰坚定的共产主义者更甚宗教徒又何曾没有盲目的时候呢?当人与社会之类全都被斩断之时,不妨静下来想想,你怀着的理想为何不是盲目的呢? 没错,也许你的想法与我不谋而合,并不是社会这一意识会将人与之同化,将人变得盲目。或者说,当人从未靠近它的时候,人就是盲目的,当你的生活只是为了生存,那么你有一天会被社会意识所同化。 我写下这篇文章并不是在告诉你要远离这里,反而是想告诉你融入它,但不与之同化。如果你能够一个人静默地思考着,那无疑是很棒的,这可以帮助你远离资本主义的浮躁。将你看过的,感受过的,思考过的,转化为自己的哲学,这就足够了。 哲学的魅力无疑是在于此的。形而上学并没有错,形而上学也是人的逻辑得来的哲学,但是与之相对的唯物辩证法也许才是人认识世界的最好工具。 人们的生活逐渐被蚕食和吞噬的今天,无论是什么阶级的人都有踏入虚无主义者,逐渐失去了思考自我与意识的能力。我想,只有在未来结束这种不公,人们才能真正地脱离人的生物性,转而真正去研究这一意识存在的意义,世界的意义,也许这才是哲学。

2023/3/4
articleCard.readMore

当代唯分论,“什么书该读”

当代唯分论,”什么书该读” 可能你很小就听过的,老师说的什么书是该读的,什么书孩子不该读。其实这个问题的问出的前提就是把书籍进行了分类。如同高尔基所说:“书籍是人类进步的阶梯”。书籍使人进步是因为其是科技与文化的载体,更确切的说,书籍中的文字是信息的载体。而非要把信息分个高低,显然是对于文字这一载体的异化。 政圈里总有人会极端的抵触反对派,但他们常常是连他们的著作都未曾涉猎过,而只是顶着自家的社科理论去批判反对派的种种行为。正所谓知识不拒多,如果你不去精读反对派的思想,又怎能找出其中的漏洞加以批判呢?某种意义上,这样的人太过教条和死板了。 总有人说一些书没有任何意义,告诉孩子那些漫画和玩具书没有任何意义,实际上这样只有反效果,培养一个规矩的工具,从而忽略了孩子天生的想象力。到这里,其实我们不仅仅说的是书籍了,更加是电子游戏、二次元文化等等令年轻人痴迷的信息,说到底这些或是故事,或是自我满足的欲望。毕竟我们的社会不会迎来一个乌托邦,他们总是需要一些幻想。 回到“什么书该读”这一问题,因为一切的文字都是由人们撰写的,所以我认为这些信息的本质都是人类,这里的人类不仅仅是种族、文化、哲学,而是人类发展至今的一切的一切。人只要活着就不断地获取信息,繁杂的也好,黑暗的也好,我们都只是不断地接受,与此同时不断地成长。那么我给出的答案是,遇则读,随心而读。一切的信息都是人类的,是人类不断深入自然得出的,尽管你可能会觉得手上的一本和你的学业毫不相干的书显得有些无用,但有时候人不断接受新的信息才会感到充实,大脑获得刺激才会觉得满足,如果你能到这种程度,那一定是你非常喜欢人类,热爱这世间的一切吧。或许我们每天都会获取重复的信息,但从数学角度来说,在“人类”的世界并不存在一个完美的模型,至少不同书籍中的信息以及我们生活的方方面面都不来自抽象世界,而是人们撰写的。 总而言之,这都是多多益善的东西。

2023/1/19
articleCard.readMore

农场主与笨驴

农场主与笨驴 从前有一个农场主,他买来许多驴子为自己拉磨。可是这些驴子总是无精打采的样子,拉磨的时候看起来又慢又笨。于是农场主想出了一个办法,他在驴子的头上吊起一根胡萝卜,这样驴子就会控制不了食欲而追着胡萝卜跑起来了。 如此,刚开始的时候,驴子们见到了垂涎已久的胡萝卜,纷纷都不要命似的拉起磨来。但是时间久了,农场主发现,很多驴子发现自己怎么都追不上近在咫尺的胡萝卜,于是又变回了它们原本懒散的状态。于是这位机智的农场主又想出了一个法子:也许只需要给这些懒惰的驴子一点威慑就行了。于是农场主改日就养了一条忠实且凶狠的猎犬来监督这些懒惰的驴子拉磨,倒是很快见了成效,在猎犬的威慑下,没有驴子敢轻易在拉磨时偷闲。可是一个月后,驴子们逐渐发现猎犬也并非那么可怕,反而是这些驴子跺几下蹄子的声势给猎犬吓得不轻。 这下这可令农场主难堪了,想着自己还得靠这些驴子吃上饭呢,这可如何是好。于是农场主只好带上些银两,看看能不能上街讨一些生意来。农场主听闻街上来了一位四处游历的学士,交些银两便能得些锦囊妙计。农场主便向这学士请教了这一问题。 回到农场后,农场主又多养了几条猎犬,告诉它们每天都准备一根胡萝卜 ,并且把这根胡萝卜奖给拉磨最多的那只驴子。 果不其然,这些驴子比原本拉磨效率快多了。

2023/1/4
articleCard.readMore

如何成为一名安那其主义者

如何成为一名安那其主义者 You believe in authority. I believe in myself. 引入 如题,这很简单,只需要你反对authoritarianism即可。 安那其主义者不像马克思主义者会考虑种种政 治策略和哲学问题,而是考虑如何形成去权威化的集体,往往会是从不同立场上联合起来。事实上,他们也并没有成功。 安那其不是一次革命就可以实现的,它需要的不仅仅是消灭剥削,而是让人类的生产方式到达一个新的高度,再进一步潜移默化地改变原本落后的教育、科技。就连马克思也曾明确指出:“生产力中也包括科学”,“劳动生产力是随着科学和技术的不断进步而不断发展的。”而安那其对于其社会个体的绝对尊重能保持科技创新力的飞速增长,而非当今赛里斯大学里的不断被生产出来用于应试的论文。 安那其主义激进吗?对于剥削者来说是激进的,我们要共享劳动经验,废除私有制,我们要摧毁他们的权威大厦。今天赛里斯孩子因跨不进大学的痛哭身影,在所谓的“劳动法”之下进行“自愿交易的工人”,试图反抗的自由主义者被血腥镇压。这一切会在他们组建的大厦不再可以从人民的口袋中捞到一点好处的时候完全消散。当人们不在相信虚伪的人民企业家和腐朽的官僚主义时,他们做出的一切剥削行径会为他们带来懊悔和谴责。 选读 节选自《无政 府主义手册》 读到这里,你应该对无政府主义社会有个清楚的概念。接下来的挑战便是:如何起而行? 无政府主义之下又分为许多不同但是互相关连的思想体系。比较完整的无政府主义政治理论包括:联邦主义(Federalism)、 互助主义(Mutualism)、个人主义(Individualism)、工团主义(Syndicalism)、无政府共产主义(Anarchist- communism)、无政府女性主义(Anarchist-feminism)以及境遇主义(Situationism)等等。存在于不同无政府主张之间的争论已有好长一段时间,要了解它们分歧则需要另一本介绍性质的小册子。然而,单就无 政府主义目前的任务而言,每个无政府派系却有一个共识。每个派系都认为在现实生活中实践无政府主义是重要的。如果你准备把接下来几页的想法付诸实践,你便是开始实行拥有你独特色彩的无政府主义,而你也成为无政 府主义行动中的一个成员,而新成员─特别是那些深思熟虑 的成员的加入对于行动来说永远是重要的。试着和你的朋友解释什么是无政府主义,多读点无政府主义的书,和其他无政府主义者交谈,是你的当务之急。无政府主义者只有一种:独立思考的无政府主义者。

2022/12/17
articleCard.readMore

windows平台最好的包管理器:scoop

windows平台最好的包管理器:scoop 对比 一个好的包管理器对于一个开发人员的重要性不言而喻,在windows平台上同类产品还有winget和Chocolatey。 winget是微软官方的包管理器,无国内镜像,使用起来急死个人,直接淘汰。Chocolatey 相比 scoop有gui,脚本数量多于scoop,但是其中不少已经没人维护或者不再更新。scoop安装软件包无须关联注册表,作为完全社区化的包管理器,其基本操作与 Chotolatey 类似,除了官方的仓库还有大量由第三方维护的仓库,其维护似乎完胜前者。 安装 在 PowerShell 中打开远程权限 1 Set-ExecutionPolicy RemoteSigned -scope CurrentUser 自定义用户(全局)Scoop 安装目录(可选) 1 2 [environment]::setEnvironmentVariable('SCOOP', 'Scoop_Path', 'User') $env:SCOOP='Scoop_Path' $env:SCOOP_GLOBAL=’GlobalScoop_Path’ 1 2 3 4 5 6 7 **个人比较喜欢全扔在D盘,如下:** ```powershell [environment]::setEnvironmentVariable('SCOOP', 'D:\ScoopApps', 'User') $env:SCOOP='D:\ScoopApps' [environment]::setEnvironmentVariable('SCOOP_GLOBAL','D:\ScoopGlobalApps','Machine') $env:SCOOP_GLOBAL='D:\ScoopGlobalApps' 官网提供的安装方式(国内无法使用): 1 irm get.scoop.sh | iex 国内镜像: 1 2 3 iwr -useb https://gitee.com/glsnames/scoop-installer/raw/master/bin/install.ps1 | iex scoop config SCOOP_REPO 'https://gitee.com/glsnames/scoop-installer' scoop update 基本操作 添加软件仓库 1 scoop bucket add <仓库名称> <仓库地址(可选,之后从该ip获取更新)> 输入获取官方提供的仓库(按需添加) 1 scoop bucket known 个人力荐的仓库 1 2 3 4 main[默认] extras versions nirsoft 超多国产软件的仓库(如 wechat): 1 scoop bucket add dorado https://github.com/chawyehsu/dorado 软件包推荐 必装(已安装git可以不选) 1 scoop install git 7zip 可选 1 2 3 4 5 6 7 8 # 加速下载 scoop install aria2 # 如果使用代理可关闭 scoop config aria2-enabled flase # 使用Linux命令行 scoop install gow # 调用管理员权限 scoop install sudo 一些其它的操作: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 一键更新所有软件 scoop update * # 搜索 scoop search <package> # 清除所有下载缓存 scoop cache rm * # 删除所有旧版本应用(scoop会保留旧版本的应用) scoop cleanup * # 查看已安装程序 scoop list # 查看更新 scoop status # 自身诊断 scoop checkup

2022/12/11
articleCard.readMore

从Python3快速开始

本文针对于想尝试Python3的极客快速入门Python3的语法 ,仅仅归纳一些重点语法,详细可绕道至菜鸟教程。 Python3 基本语法 引子 调用”print”函数打印数据: 1 2 3 print('Hello World!') print("Hello World!") print('Hello','World!') 字符串可以用单引号和双引号包裹。用逗号分开两个字符串时,python解释器会把它们分隔开打印。 输出结果都是 Hello World! 变量与强制数据类型转换 type和id关键字分别可以返回变量的数据类型和在内存中的标识 定义一些变量: 1 2 3 4 5 6 str1 = 'hello' str2 = '5.21' str3 = '110' int1 = 10 bool1 = True float1 = 3.14 可以用这样的结构进行强制数据类型转换:数据类型(变量) 1 2 3 int1 = '567' print(type(int1)) print(type(str(int1))) 输出: 1 2 <class 'int'> <class 'str'> 算数运算符 此处过于简单,直接上代码: 1 2 3 4 5 6 7 8 9 10 11 print(1 + 1) print(5 - 1) print(2 * 3) # 乘法 print(8 / 2) # 除法 print(11 // 2) # 除法只留整数 print(11 % 2) # 除法只留余数 print(2 ** 3) # 幂运算 print(9 // -4) print(-9 // 4) # 向下取整 print(9 % -4) # 公式:余数=被除数-除数*商 print(-9 % 4) # 3=-9-4*(-3) 输出: 1 2 3 4 5 6 7 8 9 10 11 2 4 6 4.0 5 1 8 -3 -3 -3 3 一些语法糖 以下每组中的代码意义相同: 1 2 a += 30 a = a + 30 1 2 a -= 30 a = a - 30 1 2 a *= 30 a = a * 30 1 2 a /= 30 a = a / 30 1 2 a //= 30 a = a // 30 以此类推… 可以这样连续声明变量: 1 2 a, b, c = 20, 30, 40 a = b = c = 20 可以这样输出多个字符串: 1 print("=" * 100) 总之,Python以易用性为理念设计,语法糖数之不尽。 各种运算符 这里搬了隔壁菜鸟教程的表格 比较运算符 运算符描述实例 ==等于 - 比较对象是否相等(a == b) 返回 False。 !=不等于 - 比较两个对象是否不相等(a != b) 返回 True。 >大于 - 返回 x 是否大于 y(a> b) 返回 False。 <小于 - 返回 x 是否小于 y。所有比较运算符返回 1 表示真,返回 0 表示假。这分别与特殊的变量 True 和 False 等价。注意,这些变量名的大写。(a < b) 返回 True。 >=大于等于 - 返回 x 是否大于等于 y。(a>= b) 返回 False。 <=小于等于 - 返回 x 是否小于等于 y。(a <= b) 返回 True。 位运算符 运算符描述实例 &按位与运算符:参与运算的两个值,如果两个相应位都为 1, 则该位的结果为 1, 否则为 0(a & b) 输出结果 12 ,二进制解释: 0000 1100 按位或运算符:只要对应的二个二进位有一个为 1 时,结果位就为 1。 ^按位异或运算符:当两对应的二进位相异时,结果为 1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001 ~按位取反运算符:对数据的每个二进制位取反,即把 1 变为 0, 把 0 变为 1。**~x** 类似于 -x-1(~a) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 <<左移动运算符:运算数的各二进位全部左移若干位,由 “<<” 右边的数指定移动的位数,高位丢弃,低位补 0。a << 2 输出结果 240 ,二进制解释: 1111 0000 >>右移动运算符:把 “>>” 左边的运算数的各二进位全部右移若干位,”>>” 右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111 身份运算符 运算符描述实例 isis 是判断两个标识符是不是引用自一个对象x is y , 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False is notis not 是判断两个标识符是不是引用自不同对象x is not y , 类似 id(x) != id(y) 。如果引用的不是同一个对象则返回结果 True,否则返回 False。 重点 == 和 != 单纯是比较数据本身是否相等 is 和 is not 则是比较变量在内存中指向对象的地址 函数 语法格式: 1 2 def 函数名(参数): return 返回值 重点: 可以在函数中使用: 1 global 变量 这样可以在函数中定义一个全局变量,即使在外部也可以访问。 小结:关于Python本身 调包侠,几乎任何开发需求都可以通过 pip 或者 conda ,安装库之后直接调用函数就可以,非常的方便 使用广泛,可以开发GUI应用,甚至还有许多基于Python的前端框架 脚本小子的晋升途径,科研狗必备 于是,我还是拿它当个玩具吧(阉割大量语法,习惯了C++等语言的朋友会感到开发体验很差,但是写写脚本还是没问题的)

2022/12/3
articleCard.readMore

正在施工🚧

Welcome to my blog. The blog is under development 注:该博客于2022年9月11日正式上线

2022/9/11
articleCard.readMore