导入与函数
值会判断之后,看文件怎么拆、函数怎么写。
导入与入口
| 概念 | Python | JavaScript |
|---|---|---|
| 导入包 | import os | import os from 'os' / require |
| 从包取符号 | from pathlib import Path | import { Path } from 'pathlib' |
| 从本地导入 | from helper import strip_html | import { 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()。
函数
| 概念 | Python | JavaScript |
|---|---|---|
| 普通函数 | def main(): | function main() {} |
| 异步函数 | async def step(...): | async function step(...) {} |
| 默认参数 | def f(fmt: str = "%Y%m%d") | function f(fmt = "%Y%m%d") |
| 返回注解 | -> str / -> None | TS : 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 }) {
// ...
}| Python | JavaScript |
|---|---|
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 怎么读写。