Tim*_*Tim -2 python python-3.x
为什么我们可以将模块名称作为变量来builtins.__import__运行,而我们必须直接将模块名称赋予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)
Run Code Online (Sandbox Code Playgroud)
那是完全不可读的.比较那个
import datetime
current_time = datetime.datetime.now()
print('Hello world!, it is now', current_time)
Run Code Online (Sandbox Code Playgroud)
但是,Python是一种高度动态的编程语言,因此您可以动态地执行许多任务.type()允许您动态构建类,可以在不使用defor的情况下构造函数lambda,并且可以基于变量导入模块.当您有明确的动态行为用例而不是静态(但更易读)语法时,可以使用这些工具.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |