【发布时间】:2019-09-01 11:09:07
【问题描述】:
所以我一直想知道忽略 DRY 规则而不是导入的天气对 python 和 django 的性能有好处。我知道当在 python 中导入某些东西时,它需要运行它来搜索错误,所以我在这里所做的似乎是合理的,但我也知道 User 是在我的项目的其他地方导入的,所以我实际上通过下面显示的方法获得了什么?
# from django.contrib.auth.models import User
class RegistrationForm(forms.ModelForm):
"""
Registration form for User. Import omitted for performance.
"""
password_1 = forms.CharField(required=True, widget=forms.PasswordInput)
password_2 = forms.CharField(required=True, widget=forms.PasswordInput)
username = forms.CharField()
email = forms.CharField(widget=forms.EmailInput)
# class Meta:
# model = User
# fields = ('username', 'email')
【问题讨论】:
-
“它需要运行它来搜索错误”是什么意思?
-
如果您想知道省略技术冗余导入是否会影响性能,您可以使用和不使用它们进行基准测试(为此启动版本控制分支将为您提供一种简单的方法来区分和交换更改并进行测试)。我严重怀疑您是否会看到任何有意义的性能提升,但您会失去可读性并可能使您或其他人的 IDE 不满意,因此我个人什至不会费心花时间设置基准为此。
-
与定义新类相比,它经常提升性能,因为它减少了内存占用(Python 绝对不是内存效率最高的语言)。
-
@WillemVanOnsem 据了解,每当您在 python 中导入某些内容时,它会加载整个脚本并运行,然后允许主程序使用导入的功能
-
@pawqo:是的。但它会这样做一次,你可以说它周围有一个“记忆”模式。很可能它已经以某种方式被导入了。例如由于
INSTALLED_APPS中的'django.contrib.auth'。此外,加载文件有一些初始成本,但仅此而已。定义第二个类对内存的影响更大,并且会一直存在,因此开销与服务器运行的时间成线性关系。
标签: django python-3.x