如果你关注的是函数相关的内容,正好我最近也在整理「2月2号新更函数」这个专题里的几类核心问题。很多人在学函数时会遇到一个诡异的共同点:明明代码写得没问题,结果终端先报错「无法将 claude 项识别为 cmdlet、函数、脚本文件或可运行程序的名称」,过两天又碰到「无法将 git 项识别为 cmdlet、函数」……这些报错本身就和「函数」在开发环境里的定位有关。这篇文章就把函数声明、常用函数盘点、特定场景函数、以及这类命令识别报错一次性讲透,适合正在学 Python、JavaScript、C/C++ 或刚接触命令行工具的人阅读,不管你是零基础还是想补漏,都能找到能直接用的内容。
1. 函数到底是什么:先理清几个最基础的认知
1.1 函数不是玄学,它只是一段“被命名的操作”
学函数最容易犯的错,就是把它想得太抽象。我习惯用做饭来类比:函数就像一个“做番茄炒蛋”的菜谱,你给它西红柿和鸡蛋(参数),它按固定步骤操作,最后给你一盘菜(返回值)。之所以要起个名字,是因为你不想每次做菜都把“切西红柿、打蛋、热油、下锅翻炒……”从头到尾写一遍,你只需要喊一声“做番茄炒蛋”,然后传食材进去就行。
很多热词里频繁出现“函数声明”“函数表达式”“箭头函数写法”,其实就是“怎么把这段操作命名并保存下来”的不同语法。比如 JavaScript 里最常见的三种写法:
javascript复制// 函数声明:直接以 function 开头,会被提升到作用域顶部
function add(a, b) {
return a + b;
}
// 函数表达式:把函数赋给一个变量,不会被提升
const add = function(a, b) {
return a + b;
};
// 箭头函数写法:更简洁,且不绑定自己的 this
const add = (a, b) => a + b;
这三种写法在很多场景下能互相替换,但有一个细节特别容易踩坑:函数声明会被“提升”,也就是你在声明之前调用也能正常工作;函数表达式不行,你必须在赋值之后才能调用。箭头函数则没有自己的 arguments 对象和 this 绑定,在需要动态 this 的场景里它反而更安全。理解了函数只是一种“命名后的操作”,后面再看回调函数、内置函数、虚函数这些概念,都能往这个基本模型上靠。
1.2 函数的输入、输出与副作用
不管什么编程语言,函数最核心的设计都是三件事:接收输入(参数)、处理逻辑、返回输出(返回值)。但很多人忽略了一个词叫“副作用”。有个很典型的例子是 Python 的列表排序:
python复制a = [3, 1, 2]
b = a.sort() # sort() 直接修改原列表,返回 None
c = sorted(a) # sorted() 返回新列表,不改原列表
如果没搞清楚哪个函数有副作用,写出来的结果经常是“变量怎么变 None 了”“原数据怎么被动过了”。Excel 里的 VLOOKUP 也一样,它本身不修改表格,只负责“按条件查值并返回”,这就是典型纯函数思维。写自定义函数的时候我建议:优先写成“不修改外部状态、只根据参数返回结果”的纯函数,排查问题会轻松很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从语言内置函数到表格函数:这些高频函数值得逐个吃透
2.1 字符串处理函数:sub_str、split、upper 的实战对比
热搜词里出现了一大批字符串函数,比如 sub_str、split、upper、C 语言字符串函数,这说明字符串处理是日常写代码绕不开的硬骨头。不同的语言里,函数名字接近但行为差异极大,这里最容易出问题。
以 split 为例,JavaScript、Python、SQL 里都有,但返回结果和使用姿势完全不同。Python 的 split 默认按空白字符拆分,返回列表;JavaScript 的 split 也返回数组,但如果你用空字符串 '' 作为分隔符,它会按字符拆开;SQL 里的某些方言有 split_part 这类函数,需要指定取第几段。sub_str 则是从字符串里截取一段,很多语言里索引是从 0 开始,但 SQL 里普遍从 1 开始。我见过最惨的翻车现场:用 Python 的习惯去写 SQL,把 substr(name, 0, 3) 当成取前三个字符,结果第一个字符死活取不到。
至于 Python 的 upper 函数,作用很直白:把字符串里的字母全部转成大写。真正有价值的不是 upper 本身,而是很多人不知道链式调用:name.strip().upper() 可以先去掉两端空格再转大写,这是处理用户输入时最常用的套路之一。C 语言的字符串函数则完全是另一套逻辑,它以字符数组为基础,函数名都带前缀 str,比如 strlen、strcpy、strcmp,而且必须自己注意缓冲区大
