小编eri*_*nla的帖子

/usr/bin/python 与 /usr/local/bin/python 对比

在 Linux 上,特别是 Debian Jessie,我应该使用/usr/bin/python还是应该安装另一个副本/usr/local/bin

据我所知,前者是系统版本,当操作系统更新时它可能会改变。这意味着我可以独立于操作系统更新后者的版本。由于我已经在使用 python 3,所以我看不出这会带来什么显着的实际差异。

使用local版本还有其他原因吗?

(我知道有大约 42 个关于如何在版本之间进行更改的问题,但我找不到任何关于原因的信息

python linux

9
推荐指数
1
解决办法
1万
查看次数

Python如何使用字符串键索引多维数组,就像dict一样

我想将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 indexing dictionary numpy pandas

8
推荐指数
1
解决办法
5674
查看次数

Python-在类的第一个实例上加载数据

我有一个 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)

python

6
推荐指数
1
解决办法
5736
查看次数

Python线程。事件重置?

我有一个想要在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 events multithreading

6
推荐指数
0
解决办法
9836
查看次数

如何从命令行使包可执行?

我想从命令行制作一个可执行的 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 linux chmod

6
推荐指数
1
解决办法
8405
查看次数

python 记录器作为 __main__ 的孩子

我无法在 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)

python logging

5
推荐指数
1
解决办法
4317
查看次数

剥离删除比预期更多的字符

任何人都可以解释这里发生了什么:

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)

python string

4
推荐指数
1
解决办法
947
查看次数

为python 2和python 3安装scipy

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 debian scipy

4
推荐指数
1
解决办法
2万
查看次数

检查python当前正在做什么线程

在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 multithreading

3
推荐指数
1
解决办法
548
查看次数

Python自定义类索引

是否可以在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__?或者,您可以用另一种方式索引自定义类吗?

python indexing

2
推荐指数
1
解决办法
2867
查看次数

"retval"是不是很好的蟒蛇风格?

是否有充分理由使用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(或其他一些命名变量),但对我来说这似乎是一种(小)浪费.

python coding-style

0
推荐指数
1
解决办法
3570
查看次数