小编Reb*_*que的帖子

Python的禅与声明 - 哲学思考

我不打算简单地浪费你的时间,但是:它是否也发生在你身上,而使用Python的with声明,它确实与"禅宗的Python"的第5行相反,"扁平比嵌套好"?任何开明的Python大师能否与我分享他们对此的一些见解?

(我总是发现每次使用时我的代码中都会出现一个更多级别的缩进with而不是f.close()......并且它不会像我不会try: ... finally: ...反正使用那样因此with我仍然无法获益,即使我渐渐喜欢并越来越多地了解Python ...)


@glglgl(对不起,我找不到在评论中编写代码的方法):是的,但如果with顺便说一下,你的代码就会变成:

try:
    with file(...) as f:
        ...
except IOError:
    ...
Run Code Online (Sandbox Code Playgroud)

...并且只使用没有这try是人们最终做的hacky"一次使用"代码,他们使用f.close()而不是反正(这是不好的,因为如果在他们之前抛出异常,文件可能不会被关闭f.close()),所以对于"hacky"代码,人们只是不使用with因为,我不知道,我猜他们只是发现它太"花哨"而且对于结构良好的代码它不会带来任何好处,所以它似乎我没有真正的世界用例...这是我真正的思考.

python coding-style indentation with-statement zen-of-python

10
推荐指数
3
解决办法
1051
查看次数

Python Zen - (仅)一种方法

这个问题可能听起来很主观,但正如"禅宗"所说的那样,(几乎总是)有一种方式可以优先考虑,最后不应该是主观的.

什么方式更好?

[i.something() for i in l]
map(operator.methodcaller('something'), l)
map(lambda x: x.something(), l)
Run Code Online (Sandbox Code Playgroud)

(1)是(IMO)非常清楚,但在很多答案中,map()都是使用的.如果我们这样做,(2)和(3)之间的可读性几乎相同(IMO,至少).

许多其他任务同样重要,但我选择了这个,因为它可以代表所有类似的任务.

python zen-of-python

10
推荐指数
1
解决办法
1178
查看次数

Pandas Groupby应用函数来计算大于零的值

Pandas Groupby应用函数来计算大于零的值

我以下列方式使用groupby和agg:

df.groupby('group')['a'].agg({'mean' : np.mean, 'std' : np.std})
Run Code Online (Sandbox Code Playgroud)

我想在同一列['a']中计算零以上的值

以下行按我的意愿计算,

sum(x > 0 for x in df['a'])
Run Code Online (Sandbox Code Playgroud)

但是在申请groupby时我无法正常工作.

下面是一个将pandas计算应用于groupby的示例,我试过:

df.groupby('group')['a'].apply(sum(x > 0 for x in df['a']))
Run Code Online (Sandbox Code Playgroud)

但是我收到一条错误消息:AttributeError:'numpy.int32'对象没有属性' module '

任何人都可以建议如何做到这一点?

python python-3.x pandas

10
推荐指数
1
解决办法
6755
查看次数

在Python中使用Properties会导致"超出最大递归深度"

这是我编写的一个测试类,用于熟悉Python脚本中的功能@propertiessetter功能:

class Test(object):
    def __init__(self, value):
        self.x =  value
    @property
    def x(self):
        return self.x
    @x.setter
    def x(self, value):
        self.x = value
Run Code Online (Sandbox Code Playgroud)

问题是,当我想从我的类创建一个对象时,我面临以下错误:

>>> t = Test(1)

Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    t = Test(1)
  File "<pyshell#18>", line 3, in __init__
    self.x =  value
  File "<pyshell#18>", line 9, in x
    self.x = value
  File "<pyshell#18>", line 9, in x
  #A bunch of lines skipped
RuntimeError: maximum recursion depth exceeded
>>> 
Run Code Online (Sandbox Code Playgroud)

python class python-2.7 python-3.x

10
推荐指数
1
解决办法
4147
查看次数

我如何检查日期是否在 Python 的范围内?

我正在尝试检查今天的日期(dd-mm-yyyy格式)是否在给定范围内。

我的代码只检查日期,而不是月份或年份......你能帮我看看有什么问题吗?

在这里它工作正常......

import datetime
TODAY_CHECK = datetime.datetime.now()
TODAY_RESULT = ('%s-%s-%s' % (TODAY_CHECK.day, TODAY_CHECK.month, TODAY_CHECK.year))
if '26-11-2017' <= TODAY_RESULT <= '30-11-2017':
    print "PASS!"
else:
    print "YOU SHALL NOT PASS, FRODO."
Run Code Online (Sandbox Code Playgroud)

但是这里不...

import datetime
TODAY_CHECK = datetime.datetime.now()
TODAY_RESULT = ('%s-%s-%s' % (TODAY_CHECK.day, TODAY_CHECK.month, TODAY_CHECK.year))
if '26-11-2017' <= TODAY_RESULT <= '01-12-2017':
    print "PASS!"
else:
    print "YOU SHALL NOT PASS, FRODO."
Run Code Online (Sandbox Code Playgroud)

python datetime python-2.7 python-datetime

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

如何删除conda envs

我在以下路径中创建了两个环境(env1env2):

Users/user/conda/envs
Run Code Online (Sandbox Code Playgroud)

我想删除env1并尝试以下命令的每种组合,但不能删除:

conda remove --name env1
conda remove --name conda/envs/env1
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

python anaconda conda

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

Python:从非BMP unicode char中查找等效的代理项对

这里给出了答案:如何在Python中使用代理对?告诉你如何转换代理对,例如'\ud83d\ude4f'转换为单个非BMP unicode字符(答案是"\ud83d\ude4f".encode('utf-16', 'surrogatepass').decode('utf-16')).我想知道如何反过来这样做.我如何使用Python从非BMP字符中找到等效的代理对,将'\U0001f64f'()转换回'\ud83d\ude4f'.我找不到明确的答案.

python unicode encoding surrogate-pairs emoji

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

如何在numpy数组和向量行之间执行包含操作?

现在我有一个numpy数组,

[[1 2]
 [3 4]
 [2 5]]
Run Code Online (Sandbox Code Playgroud)

和一个矢量.

[2,
 5,
 2]
Run Code Online (Sandbox Code Playgroud)

我想在数组和向量行之间执行包含操作.换句话说,我想检查第一行是否[1, 2]包含2,第二行是否[3, 4]包含5.预期的输出看起来像:

[True, False, True] 
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个功能?提前谢谢了.

python numpy

8
推荐指数
3
解决办法
330
查看次数

如何验证命名元组值?

我有一个namedtuple 变量,它代表应用程序的版本(它的编号和类型)。但我想对值进行一些限制:

Version = namedtuple("Version", ["app_type", "number"])
version = Version("desktop") # i want only "desktop" and "web" are valid app types
version = Version("deskpop") # i want to protect from such mistakes
Run Code Online (Sandbox Code Playgroud)

我现在的解决方案是没有方法的原始类:

class Version:
    def __init__(self, app_type, number):
        assert app_type in ('desktop', 'web')

        self.app_type = app_type
        self.number = number
Run Code Online (Sandbox Code Playgroud)

它是pythonic吗?是否矫枉过正?

python oop namedtuple python-3.x

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

是否可以运行列表中的命令?

我正在尝试制作一个程序,它将选择一个随机数,并对该数字运行相应的命令.我将多个命令放在列表中,如下所示

list = [cmd1(), cmd2(), cmd3(), cmd4()]
x = randint(0, len(list-1))
list[x]
Run Code Online (Sandbox Code Playgroud)

有没有办法以这种方式运行命令?(我使用的是python 3.5)

python python-3.x

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