它总是困扰着我。在我看来,这是:
my_list = ["Hello", "world"]
print(my_list.join("-"))
# результат: "Hello-world"
会比这更清楚:
my_list = ["Hello", "world"]
print("-".join(my_list))
# результат: "Hello-world"
以这种方式编写是否有特定原因?
它总是困扰着我。在我看来,这是:
my_list = ["Hello", "world"]
print(my_list.join("-"))
# результат: "Hello-world"
会比这更清楚:
my_list = ["Hello", "world"]
print("-".join(my_list))
# результат: "Hello-world"
以这种方式编写是否有特定原因?
我有两个数组:
arr1 = np.array([1, 2])
arr2 = np.array([3, 4, 5])
我如何将它们相乘并得到一个矩阵:
[
[3, 4, 5],
[6, 8, 10]
]
我正在使用以下解决方案:
np.dot(arr1.reshape((2, 1)), arr2.reshape((1, 3)))
但在我看来,这并不方便。有哪些更好的解决方案?
有一个代码可以找到从2
到的所有素数n
。它工作正常,但我不喜欢其中几乎有两个相同的if
。如何在不增加功能时间的情况下删除它们?
def f(n):
set_ = set()
arr = [2, 3]
for i in range(6, n+1, 6):
a, b = i - 1, i + 1
if a not in set_:
set_.update(range(a, n+1, a))
arr.append(a)
if b not in set_:
set_.update(range(b, n+1, b))
arr.append(b)
return arr
我试图弄清楚何时使用__getattr__
以及何时使用__getattribute__
. 该文档提到了__getattribute__
适用于新样式类的内容。什么是新风格课程?
有什么理由让一个类继承自object
?
我刚刚找到了执行此操作的代码,但找不到很好的理由。
class MyClass(object):
# Код класса...
Python 类的翻译继承了@tjvr的对象问题
Python 中的元类是什么,为什么要使用它们?
问题的翻译Python 中的元类是什么?成员@e-satis
_
这段代码中的after是什么for
意思?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
我也在学习如何threading
在multiprocessing
Python 中使用模块来并行运行某些操作并加速我的代码。
我很难理解 objectthreading.Thread()
和multiprocessing.Process()
.
此外,我并不完全清楚如何实例化一个作业队列,并且只有 4 个(例如)并行运行,而其他的则等待资源在执行前被释放。
我发现文档中的示例清晰但不是很全面。一旦我尝试使事情复杂化一点,我就会得到很多奇怪的错误。
那么,我什么时候应该使用模块threading
和multiprocessing
?
您能否将我链接到一些资源来解释这两个模块背后的概念以及如何正确地将它们用于复杂的任务?
__slots__
Python的目的是什么。特别是关于何时使用它,何时不使用它?
问题的翻译__slots__ 的用法?通过@Jeb
结果range
将始终是唯一的数字,因此它将range.count(x)
返回0
or 1
,可以像这样获得相同的结果
int(x in range)
性能是一样的,例如:
int(100000000000000 in range(100000000000001))
range(100000000000001).count(100000000000000)
这在两种情况下都会立即返回1
,因此出现了问题,这些选项之间有什么区别以及为什么需要该方法count
据我了解,函数range()
实际上是 Python 3 中的一种对象类型,它动态生成其内容,类似于生成器。
在这种情况下,我预计下一行会花费不合理的长时间,因为必须生成千万亿的值来确定 1 千万亿是否在该范围内:
1000000000000000 in range(1000000000000001)
此外,似乎无论我添加多少个零,计算或多或少都会花费相同的时间(大部分是即时的)。
我也尝试过这样的事情,但计算仍然几乎是瞬时的:
1000000000000000000000 in range(0,1000000000000000000001,10) # С шагом в десять
如果我尝试实现自己的功能range
,结果就不那么好了!!
def my_crappy_range(N):
i = 0
while i < N:
yield i
i += 1
return
对象的引擎盖下发生了什么range()
,为什么偏移量如此之快?
@RicksupportsMonica翻译的问题为什么1000000000000000 in range(1000000000000001)
在 python 3 中如此之快
我已经实现了一个类Fraction
,原始模块可以接受一个类型号float
并将其转换为两个整数,一个分母和一个分子。我的版本不知道怎么实现这个,用什么算法
点播代码:
def NOD(a, b):
while a and b:
if a < b:
b %= a
else:
a %= b
return max(a, b)
def NOK(a, b):
return a * b / NOD(a, b)
class fraction():
def __init__(self, x, y = 1):
self.x, self.y = x, y
def __repr__(self):
return f"{self.x} {self.y}"
def __add__(self, other):
n = NOK(self.y, other.y)
d1, d2 = n / other.y, n / self.y
return fraction(self.x * d1 + other.x * d2, n)
此代码从输入的范围生成数字。您可以指出代码中的错误以及如何改进它。
function rand(){
let num = Math.random()
let maxval = max.value
let minval = min.value
label.innerHTML = Math.round(num * (maxval - minval) + minval)
}
body{
background: linear-gradient(90deg, red, blue);
}
table{
width: 50%;
height: 50%;
margin: 25%;
}
input{
width: 100%;
height: 100%;
}
label{
width: 100%;
height: 100%;
}
button{
width: 100%;
height: 100%;
}
<table>
<tr><th><input id="min" valuetype="number" ></th></tr>
<tr><th><input id="max" valuetype="number" ></th></tr>
<tr><th><label id="label" >0</label></th></tr>
<tr><th><button onclick="rand()">generate</button></th></tr>
</table>
我有一堂课:
class MyClass():
def __init__(self, n):
self.n = n
def __str__(self):
return str(self.n)
和一个arr
包含类实例的列表:
arr = [MyClass(0), MyClass(1)]
如何使其print(arr)
输出:
['0', '1']
但不是:
[<__main__.MyClass object at 0xebeb3dc0>, <__main__.MyClass object at 0xebdcb580>]
完整代码:
class MyClass():
def __init__(self, n):
self.n = n
def __str__(self):
return str(self.n)
arr = [MyClass(0), MyClass(1)]
print(arr)
决定上课Vec2
:
class Vec2():
def __init__(self, x = 0, y = 0):
self.x, self.y = x, y
def __add__(self, num):
if type(num) == Vec2:
return Vec2(self.x + num.x, self.y + num.y)
return Vec2(self.x + num, self.y + num)
def __str__(self):
return f"{self.x} {self.y}"
还有一个问题,我可以实现一个__add__
没有if
'a的方法吗?
像这样的 C++ 代码:
vec2 operator+(vec2& v) {
return vec2(x + v.x, y + v.y);
}
vec2 operator+(double s) {
return vec2(x + s, y + s);
}
如何在numpy中拉伸矩阵
例如
[[0, 1],
[2, 3]]
变成
[[0, 0, 1, 1],
[0, 0, 1, 1],
[2, 2, 3, 3],
[2, 2, 3, 3]]
每次创建 2D 矢量时,都必须编写
vector<vector<int>>
不舒服。怎样才能写得更简洁?
这是 2D 中的示例:
def ray(x, y, angle, step):
new_x = x + sin(angle) * step
new_y = y + cos(angle) * step
return new_x, new_y
我做了一个程序,你可以在其中近似 Mandelbrot 集
我有一个问题如何优化它?
import pygame
from pygame import gfxdraw
pygame.init()
win = pygame.display.set_mode((500, 500))
I = (-1) ** .5
maxiter = 64
def f(z, c):
return z * z + c
def mandelbrot(x, y, scale):
win.fill((0, 0, 0))
for i in range(500):
for j in range(500):
i0, j0 = i / scale + x, j / scale + y
i0 = i0 / 250 * 2 - 2
j0 = j0 / 250 * 2 - 2
c = (i0 + j0 *I)
z = 0
for depth in range(maxiter):
z = f(z, c)
if abs(z) > 100:
break
c = depth * (255 / maxiter)
gfxdraw.pixel(win, i, j, (c, c, c))
pygame.display.update()
mandelbrot(0, 0, 1)
x, y, scale = 0, 0, 1
while True:
for ev in pygame.event.get():
if ev.type == pygame.MOUSEBUTTONUP:
x0, y0 = ev.pos
x0 -= 50
y0 -= 50
x0 /= scale
y0 /= scale
x += x0
y += y0
scale *= 5
mandelbrot(x, y, scale)