我不打算简单地浪费你的时间,但是:它是否也发生在你身上,而使用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
这个问题可能听起来很主观,但正如"禅宗"所说的那样,(几乎总是)有一种方式可以优先考虑,最后不应该是主观的.
什么方式更好?
[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,至少).
许多其他任务同样重要,但我选择了这个,因为它可以代表所有类似的任务.
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脚本中的功能@properties和setter功能:
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) 我正在尝试检查今天的日期(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) 我在以下路径中创建了两个环境(env1和env2):
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中使用代理对?告诉你如何转换代理对,例如'\ud83d\ude4f'转换为单个非BMP unicode字符(答案是"\ud83d\ude4f".encode('utf-16', 'surrogatepass').decode('utf-16')).我想知道如何反过来这样做.我如何使用Python从非BMP字符中找到等效的代理对,将'\U0001f64f'()转换回'\ud83d\ude4f'.我找不到明确的答案.
现在我有一个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)
我怎么能实现这个功能?提前谢谢了.
我有一个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吗?是否矫枉过正?
我正在尝试制作一个程序,它将选择一个随机数,并对该数字运行相应的命令.我将多个命令放在列表中,如下所示
list = [cmd1(), cmd2(), cmd3(), cmd4()]
x = randint(0, len(list-1))
list[x]
Run Code Online (Sandbox Code Playgroud)
有没有办法以这种方式运行命令?(我使用的是python 3.5)
python ×10
python-3.x ×4
python-2.7 ×2
anaconda ×1
class ×1
coding-style ×1
conda ×1
datetime ×1
emoji ×1
encoding ×1
indentation ×1
namedtuple ×1
numpy ×1
oop ×1
pandas ×1
unicode ×1