PEP 08指出:
导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前.
但是,如果我导入的类/方法/功能仅在极少数情况下使用,那么在需要时进行导入肯定会更有效率吗?
不是这个:
class SomeClass(object):
def not_often_called(self)
from datetime import datetime
self.datetime = datetime.now()
Run Code Online (Sandbox Code Playgroud)
比这更有效率?
from datetime import datetime
class SomeClass(object):
def not_often_called(self)
self.datetime = datetime.now()
Run Code Online (Sandbox Code Playgroud) 我可以通过多种方式在Python中导入模块而感到困惑.
import X
import X as Y
from A import B
Run Code Online (Sandbox Code Playgroud)
我一直在阅读有关作用域和名称空间的内容,但我想就什么是最佳策略,在哪种情况下以及为什么,提供一些实用的建议.是否应该在模块级别或方法/功能级别进行导入?在__init__.py模块代码本身中?
我的问题并没有真正回答" Python包 - 按类导入,而不是文件 ",尽管它显然是相关的.
我是新来的,并不是100%肯定如何提出这个问题,所以我只是潜入.我应该在我编写的每个函数的开头使用import语句,导入我需要的所有各种模块/函数该功能的范围?即
def func1()
import os.path
print func(2)
do something with os.path
def func2()
import os.path
do something with os.path
Run Code Online (Sandbox Code Playgroud)
这会增加内存开销或其他开销,还是只是将本地名称映射到已加载对象的import语句?有没有更好的方法来做到这一点?(链接到教程等最受欢迎.我一直在寻找一段时间,但无法找到一个好的答案.)
如果我import在一个if/else块中嵌套了语句,我是否会提高效率?我知道有些语言会对代码import和语法问题进行"一次通过" .我只是不确定Python是如何深入研究的.
由于Python是通过import在else块中嵌套语句来解释而不是编译的,因此在到达该行之前不会导入这些库,因此除非另有需要,否则将节省系统资源.
我编写了一个脚本,这个脚本将被更多的计算机文化使用,而那些则更少.我的部门非常熟悉从命令行运行带有参数的脚本,所以我已经设置它来获取它需要的参数,如果它没有找到它期望的参数,它将启动带有标题,按钮的GUI,和更详细的说明.但是,这意味着我正在导入仅在未提供参数的情况下使用的库.
假设我有一个名为device的模块,其中包含一个名为ConfigureDevice的类。还可以说我有一个名为comports的模块,它在名为ComPorts的类(C 中的枚举)中定义了我的 com 端口。
现在,假设ConfigureDevice的构造函数采用一个名为comPorts 的参数。问题是,我应该在设备模块的开头导入comports还是应该创建ConfigureDevice 的代码进行此导入?
因此,导入comports应该发生在这里:
# device module
import serialwriter
import comports
class ConfigureDevice:
def __init__(self, comPort):
self.serialWriter = serialwriter.SerialWriter(comPort)
Run Code Online (Sandbox Code Playgroud)
或者我应该将其导入到创建ConfigureDevice的代码中,如下所示:
import device
import comports
...
device.ConfigureDevice(comports.ComPorts.COM_1)
Run Code Online (Sandbox Code Playgroud) 例:
import user
class Thing(object):
def doSomething(self):
u = user.User(1)
print u.name
>> UnboundLocalError: local variable 'user' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
但这有效:
class Thing(object):
def doSomething(self):
import user
u = user.User(1)
print u.name
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
编辑:
但这有效:
import user as anothername
class Thing(object):
def doSomething(self):
u = anothername.User(1)
print u.name
Run Code Online (Sandbox Code Playgroud) 我有一个小应用程序,我想分成模块,以便我的代码更好的结构和可读性.这样做的缺点是我导入的每个模块使用:
import module
Run Code Online (Sandbox Code Playgroud)
然后我必须将module.object用于我想从该模块访问的任何对象.
在这种情况下,我不想污染全局命名空间,我想用适当的模块名称填充它,以便我不必使用
from module import *
Run Code Online (Sandbox Code Playgroud)
为了在没有模块前置的情况下调用对象.
有没有办法做到这一点,不考虑从进口或进口的不良使用?
我想知道python程序中import语句的位置是否对性能有任何影响.例如,如果我有这个
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
import json
import requests
from flask import render_template, request, Flask, session, Markup, jsonify, send_from_directory
from wit import Wit
from os import urandom
from datetime import datetime
from uuid import uuid1
from random import choice
from FAAWrapper import FAA_API
from bs4 import BeautifulSoup
def function1():
from OpenSSL import SSL
from fuzzywuzzy import process
continue
def function2():
continue
Run Code Online (Sandbox Code Playgroud)
调用function1()会不会影响性能,因为function1包含import语句?我的所有导入应该放在顶部还是仅在第一次调用函数时才导入导入?