PEP8有一条关于将导入放在文件顶部的规则:
导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前.
但是,在某些情况下,我可能想要做以下事情:
import sys
sys.path.insert("..", 0)
import my_module
Run Code Online (Sandbox Code Playgroud)
在这种情况下,pep8命令行实用程序标记我的代码:
E402模块级别导入不在文件顶部
实现PEP8符合sys.path修改的最佳方法是什么?
我有这个代码,因为我遵循了Hitchhiker的Python指南中给出的项目结构.
该指南建议我有一个my_module文件夹,与文件夹分开tests,两者都在同一目录中.如果我要访问my_module从tests,我想我需要添加..到sys.path
在过去的一小时里,我一直在为我的包裹中的进口做斗争.
我有一个像这样的目录结构:
main_package
|
| __init__.py
| folder_1
| | __init__.py
| | folder_2
| | | __init__.py
| | | script_a.py
| | | script_b.py
|
| folder_3
| | __init__.py
| | script_c.py
Run Code Online (Sandbox Code Playgroud)
我想访问代码script_b.py以及script_c.py来自的代码script_a.py.我怎样才能做到这一点?
如果我把一个简单的import script_b内部script_a.py,当我跑
from main_package.folder_1.folder_2 import script_b
Run Code Online (Sandbox Code Playgroud)
我遇到了一个
ImportError: no module named "script_b"
Run Code Online (Sandbox Code Playgroud)
为了访问script_c.py,我不知道.我无法找到有关访问两级文件的任何信息,但我知道我可以导入一级文件
from .. import some_module
Run Code Online (Sandbox Code Playgroud)
如何从中访问这两个文件script_a.py?
python directory-structure python-import python-3.x relative-import
我正在尝试为类方法编写装饰器@cachedproperty.我希望它的行为,以便在首次调用该方法时,该方法将替换为其返回值.我也希望它的行为类似于@property不需要显式调用它.基本上,它应该是无法区分的,@property除了它更快,因为它只计算一次值然后存储它.我的想法是,这不会减慢实例化的速度,就像定义它一样__init__.这就是我想要这样做的原因.
首先,我试图覆盖它的fget方法property,但它是只读的.
接下来,我想我会尝试实现一个需要第一次调用的装饰器,然后缓存值.这不是我永远不需要调用的属性类型装饰器的最终目标,但我认为这将是一个更容易解决的问题.换句话说,对于稍微简单的问题,这是一个无效的解决方案.
我试过了:
def cachedproperty(func):
""" Used on methods to convert them to methods that replace themselves
with their return value once they are called. """
def cache(*args):
self = args[0] # Reference to the class who owns the method
funcname = inspect.stack()[0][3] # Name of the function, so that it can be overridden.
setattr(self, funcname, func()) # Replace the function with its …Run Code Online (Sandbox Code Playgroud) 我的Conway在Python中的生活游戏实现似乎没有正确遵循规则,我无法弄清楚可能出错的地方.当我将最终配置放入Golly时,它会继续超出我的范围.
我首先通过将我的程序停止进入Golly的配置来识别程序,然后注意到它可以进一步传送.
我还把我的游戏中的整个小板放到了Golly中,它与我的配置有很大的不同.Golly是一款广泛使用的生命模拟器游戏.
我尝试了几种不同的方法来解决我的问题:
and/ orstatements.neighbors()通过将其插入到自己的程序中并设置一些网格配置来测试我的功能.neighbors()了一个位置.它工作得很好.看着我的代码,我看不出它为什么不起作用.我没有得到错误,它有效,它只是错误.模式的进展与它们的应用方式大不相同.这也是我编写的第一个> 100行程序,如果没有松散地遵循教程,请原谅我,如果答案是显而易见的.
相关代码如下:
#Function to find number of live neighbors
def neighbors(row, column):
adjacents = 0
#Horizontally adjacent
if row > 0:
if board[row-1][column]:
adjacents += 1
if column > 0:
if board[row][column-1]:
adjacents += 1
if row < thesize-1:
if board[row+1][column]:
adjacents += 1
if column < thesize-1:
if board[row][column+1]:
adjacents += 1
#Diagonally adjacent
if row > 0 and …Run Code Online (Sandbox Code Playgroud) 在我看来,itertools模块中的许多功能都具有更容易的等价物.例如,据我所知,itertools.islice(range(10),2,5)做同样的事情range(10)[2:5],itertools.chain([1,2,3],[4,5,6])做同样的事情[1,2,3]+[4,5,6].主要文档页面提到了速度优势,但除此之外还有任何理由选择itertools吗?
我有一个元素,当它的内容发生变化时,它的宽度我想要动画.它有width: auto,而且永远不会改变.我已经看过这个技巧,但那是为了在两个值之间转换而设置一个.我根本不操纵值,只是内容,我希望我的元素大小随动画而改变.这在CSS中完全可能吗?
这是我的代码的简化版本:
.myspan {
background-color: #ddd;
}
.myspan:hover::after {
content: "\00a0\f12a";
font-family: Ionicons;
font-size: 80%;
}Run Code Online (Sandbox Code Playgroud)
<link href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" rel="stylesheet"/>
<html>
<body>
<span class="myspan">Hello!</span>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
当用户将鼠标悬停在元素上时,我希望将大小改变为动画.
我想在没有默认动画的情况下设置a的strokeEnd属性CAShapeLayer,根本没有动画.我环顾四周试图找到如何做到这一点,但一切似乎都是关于如何动画属性.
我有一个用户输入功能的程序,例如sin(x)+1.我正在ast尝试通过将组件列入白名单来确定字符串是否"安全",如本答案中所示.现在我想解析字符串,*在没有它们的系数之间添加乘法()符号.
例如:
3x- > 3*x4(x+5) - > 4*(x+5)sin(3x)(4)- > sin(3x)*(4)(sin已经在全局变量中,否则这将是s*i*n*(3x)*(4)有没有有效的算法来实现这一目标?我更喜欢pythonic解决方案(即不是复杂的正则表达式,不是因为它们是pythonic,而是因为我不理解它们并想要一个我能理解的解决方案.简单的正则表达式是可以的.)
sympy在一个条件下,我非常愿意使用(这对于这类事情看起来很容易):安全.显然是在引擎盖下sympy使用eval.我目前的(部分)解决方案的安全性非常好.如果有人有办法sympy使用不受信任的输入更安全,我也欢迎这一点.
我正在写一个python spirograph程序,我需要一些帮助将它的一部分转换成一个函数.代码试图重现我在这里找到的视频中说明的结果.一条线围绕原点旋转,然后另一条线从其末端旋转,等等.
通过对(我认为是)三角学的一点研究,我把一个函数放在一起rotate(point, angle, center=(0, 0)).用户输入要旋转的点,旋转的角度(顺时针),以及旋转的中心点.
然后,我实施了初始测试,其中一条线围绕另一条线旋转.第二行的结尾绘制就像握笔一样.代码有点乱,但看起来像这样.
x, y = 0, 0
lines = []
while 1:
point1 = rotate((0,50), x)
point2 = map(sum,zip(rotate((0, 50), y), point1))
if x == 0:
oldpoint2 = point2
else:
canvas.create_line(oldpoint2[0], oldpoint2[1], point2[0], point2[1])
lines.append( canvas.create_line(0, 0, point1[0], point1[1]) )
lines.append( canvas.create_line(point1[0], point1[1], point2[0], point2[1]) )
oldpoint2 = point2
tk.update()
x += 5
if x > 360 and y > 360:
x -= 360
canvas.delete("all")
time.sleep(1)
y += 8.8
if y …Run Code Online (Sandbox Code Playgroud)