Python 为什么我们必须直接给'import'语句指定模块名?

Python 为什么我们必须直接给'import'语句指定模块名?,python,python-3.x,Python,Python 3.x,我在读书 为什么我们可以将模块名作为变量指定给内置函数。\uuuuu import\uuuu函数, 而我们必须直接给import语句指定模块名 语句和函数之间有什么区别导致了这种差异?同样的原因,您需要将函数名指定给def语句,或将类名指定给class;两者都可以通过其他方式创建。因为这就是语法的设计方式,以使通用操作能够使用可读、清晰、简洁的语法 出于同样的原因,当您已经知道要访问的属性名称时,可以使用object.attributename,但当您需要动态确定名称时,可以使用getattr(

我在读书

为什么我们可以将模块名作为变量指定给
内置函数。\uuuuu import\uuuu
函数, 而我们必须直接给
import
语句指定模块名


语句和函数之间有什么区别导致了这种差异?

同样的原因,您需要将函数名指定给
def
语句,或将类名指定给
class
;两者都可以通过其他方式创建。因为这就是语法的设计方式,以使通用操作能够使用可读、清晰、简洁的语法

出于同样的原因,当您已经知道要访问的属性名称时,可以使用
object.attributename
,但当您需要动态确定名称时,可以使用
getattr()
。后者更需要程序员理解

想象一下必须涉水而过

modules_to_import = ['builtins', 'datetime']
for name in modules_to_import:
    globals()[name] = __import__(name)
print_function_name = 'print'
current_time = getattr(getattr(globals()['datetime'], 'datetime'), 'now')()
getattr(globals()['builtins'], print_function_name).__call__('Hello world!, it is now', current_time)
那完全不可读。与之相比

import datetime
current_time = datetime.datetime.now()
print('Hello world!, it is now', current_time)

然而,Python是一个很好的工具,因此您可以使用它动态地执行许多任务
type()
允许您动态构建类,可以在不使用
def
lambda
的情况下构建函数,并且可以基于变量导入模块。当您有一个明确的动态行为用例,而不是静态(但可读性更强)语法时,您可以使用这些工具。

谢谢。同样的事情发生在其他语言上,比如C++、C++、C、java、……?python是一种高度动态的语言,通过动态方式让你访问很多语法。您刚刚命名的语言是高度静态的,这意味着从运行时执行同样的操作要困难得多,或者通常是不可能的。但在大多数情况下,是的,语法的存在是为了方便地表达公共结构(在语言设计约束范围内)。