在 Linux 上,特别是 Debian Jessie,我应该使用/usr/bin/python还是应该安装另一个副本/usr/local/bin?
据我所知,前者是系统版本,当操作系统更新时它可能会改变。这意味着我可以独立于操作系统更新后者的版本。由于我已经在使用 python 3,所以我看不出这会带来什么显着的实际差异。
使用local版本还有其他原因吗?
(我知道有大约 42 个关于如何在版本之间进行更改的问题,但我找不到任何关于原因的信息)
我想将numpy的功能array与本机python 相结合dict,即创建一个可以用字符串索引的多维数组.
例如,我可以这样做:
dict_2d = {'a': {'x': 1, 'y': 2},
'b': {'x': 3, 'y': 4}}
print dict_2d['a','y'] # returns 2
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做dict_2d['a']['x']但是长期我希望能够像numpy数组那样对待它们,包括进行矩阵乘法等等,而且不能用分层的dicts.
编写一个简单版本的类并不难,我只是使用该类将所有字符串转换为int索引然后使用numpy,但我想使用已存在的东西,如果可能的话.
编辑:我不需要令人难以置信的表现.我将使用10x10阵列.我的目标是使代码编写简单而强大.使用numpy数组与在Fortran中编写它并没有太大的不同.我花了很多时间追踪Fortran索引错误......
我有一个 python 类需要引用一个大数据集。我需要创建该类的数千个实例,因此我不想每次都加载数据集。将数据放入必须首先创建的另一个类中并作为参数传递给另一个类是很简单的:
class Dataset():
def __init__(self, filename):
# load dataset...
class Class_using_dataset():
def __init__(self, ds)
# use the dataset and do other stuff
ds = Dataset('file.csv')
c1 = Class_using_dataset(ds)
c2 = Class_using_dataset(ds)
# etc...
Run Code Online (Sandbox Code Playgroud)
但我不希望我的用户必须处理数据集,因为如果我可以在后台执行它,它总是相同的。
当我创建类的第一个实例时,是否有一种 pythonic/canonical 方法将数据加载到全局命名空间中?我希望有这样的事情:
class Class_using_dataset():
def __init__(self):
if dataset doesn't exist:
load dataset into global namespace
use dataset
Run Code Online (Sandbox Code Playgroud) 我有一个想要在threading.Events 上重复运行的函数。然而,您似乎只能使用每个Event实例一次。
有没有办法重置thread.Event以便再次触发?我想它可能看起来像这样:
import threading
import time
def waiting_function(trigger):
while True:
trigger.wait()
# do stuff after trigger
trigger.reset()
trigger = threading.Event()
waiting_thread = threading.Thread(target=waiting_function, args=[trigger])
waiting_thread.start()
time.sleep(3.) # do some stuff that takes a while
trigger.set()
time.sleep(3.) # do some stuff that takes a while
if not trigger.is_set:
trigger.set()
Run Code Online (Sandbox Code Playgroud)
或者,我是否必须trigger在每组之后创建一个新的并在线程之间共享它?
我想从命令行制作一个可执行的 python 包。
我知道您可以使用chmod +x myfile.pywheremyfile.py开始#!/usr/bin/env使单个文件可执行./myfile.py。我还知道您可以python -m mypackage运行包含__main__.py.
但是,如果我将 shebang 行添加到__main__.py包中,运行chmod +x mypackage并尝试./mypackage,则会收到错误-bash: ./mypackage: Is a directory。
是否可以运行这样的包?
(要明确的是,我并不是在寻找像 py2exe 这样的东西来使其成为独立的可执行文件。我仍然期望它被解释,我只是想让启动更简单)
我无法在 python (2.7) 中正确命名子记录器。我有以下文件结构:
-mypackage
-__init__.py
-main.py
-log
-__init__.py
-logfile.log
-src
-__init__.py
-logger.py
-otherfile.py
Run Code Online (Sandbox Code Playgroud)
main.py 的内容是:
import logging
import src.logger
from src.otherfile import Foo
logger = logging.getLogger(__name__)
logger.info('Logging from main')
foo = Foo()
Run Code Online (Sandbox Code Playgroud)
otherfile.py 的内容是:
import logging
class Foo():
def __init__(self):
self.logger = logging.getLogger(__name__)
self.logger.info('Logging from class in otherfile')
Run Code Online (Sandbox Code Playgroud)
logger.py 的内容是:
import os
import logging
logdir = os.path.dirname(__file__)
logfile = os.path.join(logdir, '../log/controller.log')
logger = logging.getLogger('__main__')
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler(logfile)
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - $(name)s - %(levelname)s: %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh) …Run Code Online (Sandbox Code Playgroud) 任何人都可以解释这里发生了什么:
s = 'REFPROP-MIX:METHANOL&WATER'
s.lstrip('REFPROP-MIX') # this returns ':METHANOL&WATER' as expected
s.lstrip('REFPROP-MIX:') # returns 'THANOL&WATER'
Run Code Online (Sandbox Code Playgroud)
那个'我'怎么了?冒号是lstrip的特殊字符吗?这特别令人困惑,因为这可以按预期工作:
s = 'abc-def:ghi'
s.lstrip('abc-def') # returns ':ghi'
s.lstrip('abd-def:') # returns 'ghi'
Run Code Online (Sandbox Code Playgroud) 我sudo apt-get install python-scipy以前安装scipy.这把所有文件放入/usr/lib/python2.7.dist-packages/scipy.我最好的猜测是它选择了那个位置,因为python 2.7是python的默认版本.我也想使用scipy和python 3.是否需要为python 3重建包,还是只需将python 3指向现有版本?
我已经尝试使用pip来安装两个并行版本,但我无法libblas3为我的系统安装依赖项.
最好的方法是什么?
我在Debian Jessie.
在python中,可以问一个线程当前正在做什么吗?一些代码可能看起来像这样:
import threading
import time
import random
def foo():
a = 'spam'
def bar():
if random.random() < 0.01: # go into an infinite loop 1% of the time
while True:
x = 42
def run(heartbeat):
while True:
foo()
bar()
heartbeat.set()
heartbeat = threading.Event()
t = threading.Thread(target=run, args=(heartbeat, ))
t.start()
while True:
time.sleep(1)
if heartbeat.is_set():
heartbeat.clear()
else:
print('Thread appears stuck at the following location: ')
print(get_thread_position(t))
Run Code Online (Sandbox Code Playgroud)
我正在寻找这样做来监视线程,看它们是否挂起。心跳事件检查它们是否处于活动状态并正常进行。但是,如果他们挂在某个地方,我希望能够找到位置。这就是我发明的地方get_thread_position(),我想向其当前执行的函数返回类似追溯的信息。这样,我可以使用该信息来弄清楚它如何陷入某个无限循环中。
是否可以在python中创建一个可以用方括号索引但不能从其他索引类型派生的类?
我对制作带有可选索引的类感兴趣,它的行为如下:
class indexed_array():
def __init__(self, values):
self.values = values
def __sqb__(self, indices): #This is a made up thing that would convert square brackets to a function
if len(indices) == 2:
return self.values[indices[0]][indices[1]]
elif len(indices) == 1:
return self.values[indices[0]][0]
myarray = indexed_array([[1,2,3], [4,5,6], [7,8,9]])
print myarray[1, 1] # returns 5
print myarray[1] # returns 4
Run Code Online (Sandbox Code Playgroud)
有没有像我这样的真正方法__sqb__?或者,您可以用另一种方式索引自定义类吗?
是否有充分理由使用retval变量而不仅仅返回计算?
def add(self, x, y):
return x + y
Run Code Online (Sandbox Code Playgroud)
与
def add(self, x, y):
retval = x + y
return retval
Run Code Online (Sandbox Code Playgroud)
我觉得我通常会在代码示例中看到retval(或其他一些命名变量),但对我来说这似乎是一种(小)浪费.