我想继承一个位于当前目录之上的文件中的类.
是否可以相对导入该文件?
我试图从控制台运行一个模块.我的目录结构是这样的:
我正在尝试运行模块p_03_using_bisection_search.py,从problem_set_02目录使用:
$ python3 p_03_using_bisection_search.py
Run Code Online (Sandbox Code Playgroud)
里面的代码p_03_using_bisection_search.py是:
__author__ = 'm'
from .p_02_paying_debt_off_in_a_year import compute_balance_after
def compute_bounds(balance: float,
annual_interest_rate: float) -> (float, float):
# there is code here, but I have omitted it to save space
pass
def compute_lowest_payment(balance: float,
annual_interest_rate: float) -> float:
# there is code here, but I have omitted it to save space
pass
def main():
balance = eval(input('Enter the initial balance: '))
annual_interest_rate = eval(input('Enter the annual interest rate: '))
lowest_payment …Run Code Online (Sandbox Code Playgroud) 我需要知道是否存在python模块,而不导入它.
导入可能不存在的东西(不是我想要的东西):
try:
import eggs
except ImportError:
pass
Run Code Online (Sandbox Code Playgroud) 我有一个我正在构建的Python程序,它可以用以下两种方式之一运行:第一种是调用"python main.py",它以友好的方式提示用户输入,然后通过程序运行用户输入.另一种方法是调用"python batch.py -file- ",它将通过所有友好的输入收集并通过程序一次性运行整个文件的输入值.
问题是,当我运行"batch.py"时,它会从"main.py"导入一些变量/方法/ etc,并在运行此代码时:
import main
Run Code Online (Sandbox Code Playgroud)
在程序的第一行,它立即出错,因为它试图在"main.py"中运行代码.
如何阻止Python运行我正在导入的"main"模块中包含的代码?
我已经尝试阅读有关兄弟进口甚至 包文档的问题,但我还没有找到答案.
具有以下结构:
??? LICENSE.md
??? README.md
??? api
? ??? __init__.py
? ??? api.py
? ??? api_key.py
??? examples
? ??? __init__.py
? ??? example_one.py
? ??? example_two.py
??? tests
? ??? __init__.py
? ??? test_one.py
Run Code Online (Sandbox Code Playgroud)
如何在脚本 examples和tests目录从导入
api模块,并可以从命令行运行?
此外,我想避免sys.path.insert每个文件的丑陋黑客.当然这可以在Python中完成,对吧?
该蟒蛇风格指南建议对进口组这样的:
应按以下顺序对导入进行分组:
- 标准库导入
- 相关的第三方进口
- 本地应用程序/库特定导入
但是,它没有提到应该如何规划两种不同的进口方式:
from foo import bar
import foo
Run Code Online (Sandbox Code Playgroud)
有多种方法可以对它们进行排序(让我们假设所有这些导入都属于同一个组):
首先from..import,然后import
from g import gg
from x import xx
import abc
import def
import x
Run Code Online (Sandbox Code Playgroud)首先import,然后from..import
import abc
import def
import x
from g import gg
from x import xx
Run Code Online (Sandbox Code Playgroud)按模块名称的字母顺序,忽略导入的类型
import abc
import def
from g import gg
import x
from xx import xx
Run Code Online (Sandbox Code Playgroud)PEP8没有提到这个的首选顺序和"清理导入"功能,一些IDE可能只是做该功能的开发人员所喜欢的任何东西.
我正在寻找另一个PEP澄清这个或来自BDFL(或其他Python核心开发人员)的相关评论/电子邮件.请不要发表陈述您自己偏好的主观答案.
给定一个Python类的字符串,例如my_package.my_module.MyClass,加载它的最佳方法是什么?
换句话说,我正在寻找Class.forName()Java中的等效函数,Python中的函数.它需要在Google App Engine上运行.
最好这是一个函数,它接受类的FQN作为字符串,并返回对类的引用:
my_class = load_class('my_package.my_module.MyClass')
my_instance = my_class()
Run Code Online (Sandbox Code Playgroud) 在速度和内存效率方面,在函数内导入Python模块和/或函数的优缺点是什么?
是否每次运行该函数时重新导入,或者可能只在开始时重新导入一次,无论函数是否运行?
我已经回答了一个关于Python绝对导入的问题,我认为我在阅读Python 2.5更新日志和随附的PEP时理解了这一点.但是,在安装Python 2.5并尝试制作正确使用的示例时from __future__ import absolute_import,我意识到事情并不那么清楚.
直接从上面链接的更改日志,这句话准确地总结了我对绝对导入更改的理解:
假设你有一个像这样的包目录:
Run Code Online (Sandbox Code Playgroud)pkg/ pkg/__init__.py pkg/main.py pkg/string.py这定义了一个名为
pkg包含pkg.main和pkg.string子模块的包.考虑main.py模块中的代码.如果它执行语句会发生什么
import string?在Python 2.4和更早的版本,它会先在包的目录进行相对进口看,发现包装/ string.py,导入该文件的内容pkg.string模块,并且该模块被绑定到名字"string"的pkg.main模块的名称空间.
所以我创建了这个确切的目录结构:
$ ls -R
.:
pkg/
./pkg:
__init__.py main.py string.py
Run Code Online (Sandbox Code Playgroud)
__init__.py并且string.py是空的.main.py包含以下代码:
import string
print string.ascii_uppercase
Run Code Online (Sandbox Code Playgroud)
正如所料,使用Python 2.5运行它失败了AttributeError:
$ python2.5 pkg/main.py
Traceback (most recent call last):
File "pkg/main.py", line 2, in <module>
print string.ascii_uppercase
AttributeError: …Run Code Online (Sandbox Code Playgroud) 建议不要import *在Python中使用.
任何人都可以分享原因,以便我下次可以避免它吗?
python ×10
python-import ×10
module ×3
coding-style ×1
directory ×1
packages ×1
pep8 ×1
python-2.5 ×1
python-2.7 ×1
python-3.6 ×1
reflection ×1
siblings ×1