Skip to content

导入与函数

值会判断之后,看文件怎么拆、函数怎么写。

导入与入口

概念PythonJavaScript
导入包import osimport os from 'os' / require
从包取符号from pathlib import Pathimport { Path } from 'pathlib'
从本地导入from helper import strip_htmlimport { stripHtml } from './helper.js'
脚本入口if __name__ == "__main__": main()直接调用,或单独入口文件
python
from helper import setup_agently

if __name__ == "__main__":
    main()
js
import { setupAgently } from './helper.js'

main()

__name__ == "__main__" 表示「直接运行本文件才执行」;被别人 import 时不会跑 main()

函数

概念PythonJavaScript
普通函数def main():function main() {}
异步函数async def step(...):async function step(...) {}
默认参数def f(fmt: str = "%Y%m%d")function f(fmt = "%Y%m%d")
返回注解-> str / -> NoneTS : string / void
关键字参数find_dotenv(usecwd=True)findDotenv({ usecwd: true })
python
async def step1_dispatch(data: Any) -> dict[str, Any]:
    ...

def yesterday(fmt: str = "%Y%m%d") -> str:
    return (datetime.now() - timedelta(days=1)).strftime(fmt)
js
async function step1Dispatch(data) {
  ...
}

function yesterday(fmt = '%Y%m%d') {
  // ...
}

Python 的 : Any-> str 运行时不检查,和 TS 注解被擦掉一样。

关键字参数 vs options 对象

python
flow.when(["A", "B"], mode="and").to(step)
os.getenv("QWEN_API_KEY", "")
js
flow.when(['A', 'B'], { mode: 'and' }).to(step)
process.env.QWEN_API_KEY || ''

Python 可以点名传参;JS 更常收一个对象。

_args / **kwargs / 仅关键字 _

*args 收剩下的位置参数,**kwargs 收剩下的关键字参数。* 单独出现表示后面必须点名传。

python
async def call(name: str, **kwargs):
    return await func(**kwargs)

def register(*, func, name=None):
    ...
js
async function call(name, kwargs) {
  return await func({ ...kwargs })
}

function register({ func, name = null }) {
  // ...
}
PythonJavaScript
def call(name, **kwargs)function call(name, kwargs),或 rest
func(**kwargs)func({ ...kwargs })
def register(*, func)没有同名语法;用 options 对象强制点名

func(*args) 展开列表 ≈ func(...args)func(**kwargs) 展开的是键值,JS 没有按参数名展开,通常整包成对象再传。

下一页叠:dict 和 list 怎么读写。