小编unu*_*tbu的帖子

`import module`比`from module import function`更好的编码风格?

我们from module import function称之为FMIF编码风格.

我们import module称之为IM编码风格.

我们from package import module称之为FPIM编码风格.

为什么IM + FPIM被认为是比FMIF更好的编码风格?(请参阅此帖子以获取此问题的灵感.)

以下是一些让我更喜欢FMIF而非IM的标准:

  1. 代码简短:它允许我使用更短的函数名称,从而有助于坚持80行每行约定.
  2. 可读性:chisquare(...)看起来比可读性更强 scipy.stats.stats.chisquare(...).虽然这是一个主观标准,但我认为大多数人会同意.
  3. 缓解重定向:如果我使用FMIF出于某种原因,在一段时间后要重定向蟒蛇定义functionalt_module不是module我需要改变只有一条线路:from alt_module import function.如果我使用IM,我需要更改许多行代码.
我意识到FPIM在某种程度上取消了前两个问题,但是第三个呢?

我对IM + FPIM可能比FMIF更好的所有原因感兴趣,但特别是,我有兴趣详细说明这里提到的以下几点:

IM的优点:

  1. 易于模拟/注入测试.(我对嘲笑并不是很熟悉,虽然我最近了解了这个术语的含义.你能展示一下代码,它展示了IM在这里比FMIF更好吗?)
  2. 通过重新定义某些条目来灵活更改模块的能力.(我一定是误解了一些东西,因为这似乎是FMIF相对于IM的优势.请参阅我上面支持FMIF的第三个理由.)
  3. 序列化和恢复数据的可预测和可控行为.(我真的不明白IM或FMIF的选择如何影响这个问题.请详细说明.)
  4. 我理解FMIF"污染了我的命名空间",但除了是一个消极的说法之外,我不理解这会如何以任何具体的方式伤害代码.
PS.在写这个问题的时候,我收到一个警告,说这个问题似乎是主观的,可能会被关闭.请不要关闭它.我不是在寻找主观意见,而是寻找具体的编码情况,其中IM + FPIM明显优于FMIF.

非常感谢.

python python-import

67
推荐指数
4
解决办法
3974
查看次数

Python Decimals格式

什么是这样格式化python十进制的好方法?

1.00 - > '1'
1.20 - > '1.2'
1.23 - > '1.23'
1.234 - > '1.23'
1.2345 - > '1.23'

python decimal

66
推荐指数
6
解决办法
14万
查看次数

Python是否懒惰地评估条件是否存在?

例如,如果我有以下声明:

if( foo1 or foo2)
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

如果foo1为true,python会检查foo2的条件吗?

python lazy-evaluation

60
推荐指数
4
解决办法
3万
查看次数

Matplotlib情节未见优秀

当我运行此代码时

import pandas as pd
import numpy as np
def add_prop(group):
    births = group.births.astype(float)
    group['prop'] = births/births.sum()
    return group

pieces = []
columns = ['name', 'sex', 'births']

for year in range(1880, 2012):
    path = 'yob%d.txt' % year
    frame = pd.read_csv(path, names = columns)
    frame['year'] = year
    pieces.append(frame)
    names = pd.concat(pieces, ignore_index = True)

total_births = names.pivot_table('births', rows = 'year', cols = 'sex', aggfunc = sum)
total_births.plot(title = 'Total Births by sex and year')
Run Code Online (Sandbox Code Playgroud)

我没有情节.这是来自Wes McKinney关于使用Python进行数据分析的书.谁能指出我正确的方向?

python matplotlib pandas

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

在Python中,以0开头的数字是什么意思?

当我输入前面带有0的小整数到python时,它们会产生奇怪的结果.为什么是这样?

>>> 011
9
>>> 0100
64
>>> 027
23
Run Code Online (Sandbox Code Playgroud)

注意:Python版本2.7.3我在Python 3.0中对此进行了测试,显然现在这是一个错误.所以这是版本特定的.

编辑:他们显然仍然是整数:

>>> type(027)
`<type 'int'>`
Run Code Online (Sandbox Code Playgroud)

python python-2.x

57
推荐指数
5
解决办法
5万
查看次数

timeit与时间装饰器

我正在尝试计算一些代码.首先我用了一个时间装饰器:

#!/usr/bin/env python

import time
from itertools import izip
from random import shuffle

def timing_val(func):
    def wrapper(*arg, **kw):
        '''source: http://www.daniweb.com/code/snippet368.html'''
        t1 = time.time()
        res = func(*arg, **kw)
        t2 = time.time()
        return (t2 - t1), res, func.__name__
    return wrapper

@timing_val
def time_izip(alist, n):
    i = iter(alist)
    return [x for x in izip(*[i] * n)]

@timing_val
def time_indexing(alist, n):
    return [alist[i:i + n] for i in range(0, len(alist), n)]

func_list = [locals()[key] for key in locals().keys()
             if callable(locals()[key]) and key.startswith('time')]
shuffle(func_list)  # …
Run Code Online (Sandbox Code Playgroud)

python timing timeit

55
推荐指数
6
解决办法
5万
查看次数

在Python中卸载模块

TL/DR:

import gc, sys

print len(gc.get_objects()) # 4073 objects in memory

# Attempt to unload the module

import httplib
del sys.modules["httplib"]
httplib = None

gc.collect()
print len(gc.get_objects()) # 6745 objects in memory
Run Code Online (Sandbox Code Playgroud)

更新 我已经与Python开发人员联系了这个问题,事实上,"未来五年" 无法完全卸载模块.(见链接)

请接受Python确实不支持在2.x中卸载严重,基本,不可克服的技术问题的模块.


在我最近在我的应用程序中搜索memleak期间,我将其缩小到模块,即我无法收集卸载的模块.使用下面列出的任何方法卸载模块会在内存中留下数千个对象.换句话说 - 我无法在Python中卸载模块...

剩下的问题是尝试以某种方式垃圾收集模块.

我们试试吧:

import gc
import sys

sm = sys.modules.copy()  # httplib, which we'll try to unload isn't yet 
                         # in sys.modules, so, this isn't the source of problem

print len(gc.get_objects()) # 4074 objects in …
Run Code Online (Sandbox Code Playgroud)

python memory-leaks

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

使用MySQLdb执行"SELECT ... WHERE ... IN ..."

我在Python中执行某些SQL时遇到问题,尽管类似的SQL在mysql命令行中工作正常.

该表如下所示:

mysql> SELECT * FROM foo;
+-------+-----+
| fooid | bar |
+-------+-----+
|     1 | A   | 
|     2 | B   | 
|     3 | C   | 
|     4 | D   | 
+-------+-----+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我可以从mysql命令行执行以下SQL查询,没有问题:

mysql> SELECT fooid FROM foo WHERE bar IN ('A','C');
SELECT fooid FROM foo WHERE bar IN ('A','C');
+-------+
| fooid |
+-------+
|     1 | 
|     3 | 
+-------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在Python中执行相同操作时,我没有获得任何行,而我期望有2行: …

python mysql

52
推荐指数
4
解决办法
14万
查看次数

将2d阵列切成较小的2d阵列

有没有办法将ndy中的2d数组切成较小的2d数组?

[[1,2,3,4],   ->    [[1,2] [3,4]   
 [5,6,7,8]]          [5,6] [7,8]]
Run Code Online (Sandbox Code Playgroud)

所以我基本上想要将2x4阵列减少为2个2x2阵列.寻找用于图像的通用解决方案.

python numpy

45
推荐指数
3
解决办法
3万
查看次数

将timedelta转换为浮点数

我从减去两个日期时间得到了一个timedelta对象.我需要将此值作为浮点进行进一步计算.我发现的所有内容都可以使用浮点计算,但结果仍然是timedelta对象.

time_d = datetime_1 - datetime_2
time_d_float = float(time_d)
Run Code Online (Sandbox Code Playgroud)

不起作用.

python floating-point datetime timedelta python-2.7

44
推荐指数
3
解决办法
5万
查看次数