python - 让python导入更有条理?

标签 python import

代码可以工作,但看起来很乱,所以这可能是一个代码审查问题,我没有研究足够多的 python 约定来了解如何构造和组织我的文件的开头更 pythonic。我基本上只是粘贴进口,所以它们可能是重复的,不再需要或错误订购。你能建议我如何构建我的导入,或者我可以留下这样的代码来专注于我自己的功能吗?

文件 1:

from __future__ import with_statement
import logging
import os
from google.appengine.api.users import is_current_user_admin, UserNotFoundError
import time
import cgi
import geo.geotypes
import main
import captcha
from google.appengine import api
from google.appengine.runtime import DeadlineExceededError
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.blobstore import BlobInfo
from google.appengine.ext.db import djangoforms
from django import forms
from django.core.exceptions import ValidationError
from django.utils import translation
from datetime import datetime, timedelta
os.environ['DJANGO_SETTINGS_MODULE'] = 'conf.settings'
from django.conf import settings
from django.template import RequestContext
from util import I18NHandler
import util
from google.appengine.api import urlfetch, taskqueue
from django.template.defaultfilters import register
from django.utils import simplejson as json
from functools import wraps
from google.appengine.api import urlfetch, taskqueue, users, images
from google.appengine.ext import db, webapp, search, blobstore
from google.appengine.ext.webapp import util, template
from google.appengine.runtime import DeadlineExceededError
from random import randrange
import Cookie
import base64
import cgi
import conf
import datetime
import hashlib
import hmac
import logging
import time
import traceback
import urllib
import twitter_oauth_handler
from twitter_oauth_handler import OAuthClient
from geo.geomodel import GeoModel
from django.utils.translation import gettext_lazy as _
webapp.template.register_template_library('common.templatefilters')

文件2(这里有几个我不明白的说明):
from __future__ import with_statement
                # -*- coding: utf-8 -*-
import facebookconf
import os, wsgiref.handlers
os.environ[u'DJANGO_SETTINGS_MODULE'] = u'conf'
import util
import time
import logging
import urllib
import wsgiref.handlers
import appengine_admin
import cgi
import captcha
import re
import hashlib
import string
import hmac
import twitter_oauth_handler
from twitter_oauth_handler import OAuthClient
os.environ['DJANGO_SETTINGS_MODULE'] = 'conf.settings'
from geo.geomodel import GeoModel
from google.appengine.dist import use_library
from google.appengine.ext import blobstore, webapp, db, search
# template import must be run before other Django modules imports
from google.appengine.ext.webapp import blobstore_handlers, util, template
from google.appengine.ext.blobstore import BlobInfo
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import files, images, mail, memcache, users
from django.conf import settings
# Force Django reload
settings._target = None
from util import I18NHandler, FacebookBaseHandler
from google.appengine.ext.db import djangoforms
from django.utils import translation
from django.utils import simplejson as json
from django.contrib.formtools.preview import FormPreview
from random import choice
from urllib import quote
from google.appengine.api.users import is_current_user_admin, UserNotFoundError
from google.appengine.api import urlfetch
import random
import datetime
from datetime import timedelta
from django.utils.translation import gettext_lazy as _
from django.template import defaultfilters

我如何知道自从函数被移动或删除后不再使用导入?为什么我不能在一个地方为多个文件指定相同的导入,而我必须在两个文件中指定相同的导入?我可以想象将处理导入移动到一个单独的文件,即 imports.yaml为该目录中的所有 python 文件指定导入或类似的。

最佳答案

PEP 8 - Style Guide for Python code建议按以下顺序订购您的进口商品:

1. Standard library imports
2. - blank line -
3. google sdk imports
4. - blank line -
5. django imports
6. - blank line -
7. your own code imports

仅导入您在代码中使用的东西。删除未使用的导入。您可以使用以下工具之一来检测未使用的导入:Pydev on Eclipse/pyflakes/pylint

你有很多进口。你的实际代码有多大?将其拆分为几个模块可能是个好主意。

为什么不能在单个文件中导入单个时间?那么你实际上可以这样做:
WARNING: THIS EXAMPLE ILLUSTRATES BAD CODING PRACTICES

import_all.py:

    import a
    import b
    import c

other.py:

     from import_all import *

但请不要那样做。 它违背了 Python 开发的所有良好实践,也违背了 The Zen of Python。 :

Explicit is better than implicit.

...

Namespaces are one honking great idea -- let's do more of those!



我还建议您阅读 Python documentation on modules还有一些关于Python namespaces .

关于python - 让python导入更有条理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7374100/

相关文章:

python - 如何在odoo中为qweb-pdf页面添加边框?

python - 使用 urllib2 进行简单 https 身份验证时出现问题(获取 PayPal OAUTH 不记名 token )

python - 在 Python 中矢量化 Haversine 距离计算

python - 如何使用 python 创建无帧视频而不将其保存到磁盘?

mysql - 如何将我的插入物分成更小的部分?

python - 提供一个源外文件夹,在其中找到我的所有外部库

python - 在 openCV 中显示的图像之间暂停

Magento 1.7.0.2 图像不存在

javascript - 导入外部javascript文件并在vue应用程序中全局使用函数

c++ - 如何使用 C++ 将 .csv 文件上传到 SQL Server