为什么Python的导入语句不使用括号?

3

我理解Python中“关键字”指的是不应该用作标识符的保留字的概念。让我感到困惑的是,除此之外,关键字似乎被用于不同的方式。例如,import和del语句似乎只接受一个参数并作为函数使用,而其他关键字如if和while则用于创建复合语句。我的问题是,如果某些关键字(例如import)被用作函数的方式,则为什么语法不同(即不使用圆括号)。与其以前用作关键字相比,print现在被用作函数更加直观。这可能会让新手感到困惑,因为他们通常的第一个语句是import,它的语法似乎类似于人类语言中的不规则动词。


1
你在哪里看到 importdel 被用作函数的方式了?那个观察是错误的。 - DeepSpace
似乎是一个无法回答的心理问题。为什么他们没有使用“$”来表示变量,而且为什么省略了大括号?这只是一个设计决策。 - ggorlen
关键字在解析期间进行处理,每个关键字都有自己的要求,如 https://docs.python.org/3/reference/simple_stmts.html 中所述。除了基本的调用语法(name(....))外,函数在运行时进行处理。如果需要使用函数语法执行导入操作,则可以使用 importlib,请参见 https://docs.python.org/3/library/importlib.html。关键字语句可以通过函数调用来执行,例如 `import',请参见 https://docs.python.org/3/library/functions.html#__import__。 - hpaulj
2个回答

2
你想的太复杂了。有一些函数可以导入,但是语句 import 简化了实现(对于我们用户而言)。想想看,如果它只是一个函数,你就必须引用字符串.. import('foo.py')。Python2 的 print 并没有在键盘输入方面节省太多时间。
如果你想要函数功能,它是可用的,请考虑 Python 语言参考中的第一段。

5. 导入系统

通过导入进程,一个模块中的 Python 代码可以访问另一个模块中的代码。导入语句是调用导入机制最常见的方法,但不是唯一的方法。也可以使用 importlib.import_module() 和内置 __import__() 等函数来调用导入机制。


更糟糕的是 - 它将是 foo = import('foo.py') - wim
此外,如果导入具有类似函数的语法,from a import b或类似语句将如何工作? - lowtex

2

导入绑定名称并删除未绑定名称,因此这些需要是语句。

importdel不能是函数的简单原因是函数无法从调用命名空间中添加/删除内容。函数体实际上没有访问调用者命名空间的权限(除了一些特定于实现的帧黑客)。

请注意,由于其语义,del不能是函数:del a会从当前命名空间中删除a。函数无法从调用命名空间中删除任何内容。

Guido van Rossum, 1994年8月1日


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接