encoding/base64和encoding/hex都支持几乎相同的函数集,但base64使用基于类的编码器,而hex在顶层导出方法.有没有一种简单的方法来创建一个围绕十六进制的包装器,以便您可以使用抽象的编码接口?更一般地说,有没有办法将方法绑定到结构?(例如,SomeStruct.Encode = hex.Encode)
到目前为止,我必须在hexEncoder结构上定义与函数具有相同签名的hex函数.我创建了一个这样的界面:
type Encoding interface {
Decode(dst, src []byte) (n int, err error)
DecodedLen(n int) int
Encode(dst, src []byte) // base64 returns nothing, hex returns int
EncodedLen(n int) int
}
Run Code Online (Sandbox Code Playgroud)
与之完美配合base64.StdEncoding,但我不知道如何包装十六进制方法.我为hex创建了一个空结构:
// wrap hex encoding/decoding so that it can be used interchangeably with base64 encoding
type hexEncoder struct {}
func (h hexEncoder) Decode(dst, src []byte) (n int, err error) {
return hex.Decode(dst, src)
}
func (h hexEncoder) DecodedLen(n int) int …Run Code Online (Sandbox Code Playgroud) 我有静态资产存储在GCS中,我想为它们提供gzip压缩(但它们是在没有压缩的情况下上传的).有没有办法设置文件进行压缩而无需下载并以gzip格式重新上传?
我尝试使用gsutil设置内容编码头(即,gsutil setmeta -h 'Content-Encoding:gzip' <some_object_uri>但它只是导致文件上的"服务不可用"(我假设是来自服务器尝试解压缩文件并失败或类似的东西).
我正在尝试安装python readline模块.我已经通过自制软件安装了readline.如果我输入
easy_install readline
Run Code Online (Sandbox Code Playgroud)
我明白了
Downloading http://pypi.python.org/packages/source/r/readline/readline-6.2.2.tar.gz#md5=ad9d4a5a3af37d31daf36ea917b08c77
Processing readline-6.2.2.tar.gz
Writing /var/folders/44/dhrdb5sx53s243j4w03063vh0000gn/T/easy_install-64FbG8/readline-6.2.2/setup.cfg
Running readline-6.2.2/setup.py -q bdist_egg --dist-dir /var/folders/44/dhrdb5sx53s243j4w03063vh0000gn/T/easy_install-64FbG8/readline-6.2.2/egg-dist-tmp-NOmStB
clang: error: no such file or directory: 'readline/libreadline.a'
clang: error: no such file or directory: 'readline/libhistory.a'
error: Setup script exited with error: command '/usr/bin/clang' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法?
谢谢
我希望允许我的函数(类工厂)的用户在使用我的函数时注入/覆盖全局导入(下面对基本原理的更长解释).但是有大约10个不同的变量可以传入,并且它为代码添加了许多非常重复的行.(授予,也使得调用也更复杂:P)现在,我正在做类似以下的事情(只是简化了所有这些).为了使它可以运行,我正在使用一个虚拟类,但在实际的脚本中我会使用import pkg1,等等.这比一个类工厂等更清晰,更短.
class Dummy(object): pass
pkg1, pkg2 = Dummy(), Dummy()
pkg1.average = lambda *args : sum(args) / len(args)
pkg2.get_lengths = lambda *args : map(len, args)
def get_average(*args, **kwargs):
average = kwargs.get("average") or pkg1.average
get_lengths = kwargs.get("get_lengths") or pkg2.get_lengths
return average(*get_lengths(*args))
adjusted_length = lambda *args: map(len, args) + [15]
print get_average([1,2], [10, 4, 5, 6]) == 3 # True
print get_average([1,2], [10, 4, 5, 6], get_lengths=adjusted_length) == 7 # True
Run Code Online (Sandbox Code Playgroud)
这个堆栈溢出帖子:在Python中修改本地化,似乎特别相关,最初我想通过存储到本地字典来覆盖本地,但(1)它似乎不起作用,(2)它似乎是一个坏的理念.所以,我想知道是否有另一种方法可以做到这一点.
这看起来很有希望(在python中将对象添加到另一个模块的全局变量 …
我有一个list的dict连键['name','content','summary',...].所有值都是字符串.但有些价值观None.我需要删除所有的新生产线content,summary以及一些其他的按键.所以,我这样做:
...
...
for item in item_list:
name = item['name']
content = item['content']
if content is not None: content = content.replace('\n','')
summary = item['summary']
if summary is not None: summary = summary.replace('\n','')
...
...
...
...
Run Code Online (Sandbox Code Playgroud)
我有点觉得这个if x is not None: x = x.replace('\n','')成语不那么聪明或干净.是否有更"pythonic"或更好的方法呢?
谢谢.
这是一个非常漂亮的操作员,在Java中没有它真的很令人沮丧.
if ("Nova Categoria" in textField1.getText()) {
textField1.setText("");
textField1.setForeground(Color.BLACK);
}
Run Code Online (Sandbox Code Playgroud)
血腥的"=="并没有给我我想要的东西,而我的Pythonic Mind现在也无法解决这个问题,因为我想要一个"in".
你会如何模拟Java中的"in"运算符?
我正在努力加快几个大型多级数据帧的总和.
这是一个示例:
df1 = mul_df(5000,30,400) # mul_df to create a big multilevel dataframe
#let df2, df3, df4 = df1, df1, df1 to minimize the memory usage,
#they can also be mul_df(5000,30,400)
df2, df3, df4 = df1, df1, df1
In [12]: timeit df1+df2+df3+df4
1 loops, best of 3: 993 ms per loop
Run Code Online (Sandbox Code Playgroud)
我不满足于993ms,有没有办法加速?cython可以改善性能吗?如果是的话,如何编写cython代码?谢谢.
注意:
mul_df()是创建演示多级数据帧的功能.
import itertools
import numpy as np
import pandas as pd
def mul_df(level1_rownum, level2_rownum, col_num, data_ty='float32'):
''' create multilevel dataframe, for example: mul_df(4,2,6)'''
index_name = …Run Code Online (Sandbox Code Playgroud) 我希望能够运行如下查询:MyModel.query(MyModel.some_property == None)并获得结果.我知道如果我不在default=<some default>一个属性中,我将无法查询它,但如果我设置default=None它会索引它吗?
同样,设置值是否None会导致属性被索引ndb.Model?如果你传递some_keyword_arg=None给构造函数怎么办?
我知道做类似的事情:ndb.StringProperty(default='')意味着你可以查询它,只是不清楚使用的语义None.
string.join如何解决?我尝试使用它如下:
import string
list_of_str = ['a','b','c']
string.join(list_of_str.append('d'))
Run Code Online (Sandbox Code Playgroud)
但是得到了这个错误(在2.7.2中完全相同的错误):
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/string.py", line 318, in join
return sep.join(words)
TypeError
Run Code Online (Sandbox Code Playgroud)
如果您尝试再次加入list_of_string,则可以看到附加确实发生了:
print string.join(list_of_string)
-->'a b c d'
Run Code Online (Sandbox Code Playgroud)
这是来自string.py的代码(找不到sep内置str.join()的代码):
def join(words, sep = ' '):
"""join(list [,sep]) -> string
Return a string composed of the words in list, with
intervening occurrences of sep. The default separator is a
single space.
(joinfields and join are synonymous)
"""
return sep.join(words)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?这是一个错误吗?如果它是预期的行为,它如何解决/为什么会发生?我觉得我要么学习一些关于python执行其函数/方法的顺序的有趣内容,或者我只是遇到了Python的历史怪癖.
旁注:当然,它只是事先做了追加:
list_of_string.append('d')
print string.join(list_of_string) …Run Code Online (Sandbox Code Playgroud) 如何使用正则表达式从使用Python的以下html字符串中获取图像的src
<td width="80" align="center" valign="top"><font style="font-size:85%;font-family:arial,sans-serif"><a href="http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNFqz8ZCIf6NjgPPiTd2LIrByKYLWA&url=http://www.news.com.au/business/spain-victory-faces-market-test/story-fn7mjon9-1226390697278"><img src="//nt3.ggpht.com/news/tbn/380jt5xHH6l_FM/6.jpg" alt="" border="1" width="80" height="80" /><br /><font size="-2">NEWS.com.au</font></a></font></td>
我试着用
matches = re.search('@src="([^"]+)"',text)
print(matches[0])
Run Code Online (Sandbox Code Playgroud)
但什么也没得到
如果我有这样的课程:
class foo(object):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
Run Code Online (Sandbox Code Playgroud)
在这样的列表中:
list = [foo(1, 2, 3), foo(4, 5, 6), foo(7, 8, 9)]
Run Code Online (Sandbox Code Playgroud)
我怎么能为'in'创建一个自定义测试,它只检查x和z值,这样:
new_foo = foo(1,8,3)
if new_foo in list:
print True
else:
print False
Run Code Online (Sandbox Code Playgroud)
会打印True
我在根目录的"static"子目录中有一个html文件"listagem.html".我想使用"listagem.html"作为jinja2的模板.
我尝试了这3个连接公式:
第一:
jinja_environment = jinja2.Environment(
autoescape = True,
loader = jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'static')))
Run Code Online (Sandbox Code Playgroud)
第二:
jinja_environment = jinja2.Environment(
autoescape = True,
loader = jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'static/')))
Run Code Online (Sandbox Code Playgroud)
第三:
jinja_environment = jinja2.Environment(
loader = jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), '/static')))
template = jinja_environment.get_template('listagem.html')
self.response.out.write(template.render(template_values))
Run Code Online (Sandbox Code Playgroud)
并收到此错误:
file not accessible: 'C:\\Users\\Me\\AppEngine\\MyAppRoot\\static\\listagem.html'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
坦克寻求帮助.
让我们看看这个简单的Java代码:
class A {
public static void main(String[] args) {
if (1 == 1)
if (2 == 2)
if (2 != 2) // <-- should end here and do nothing
System.out.println("2 != 2");
else
System.out.println("2 != 2");
else
System.out.println("1 != 1");
}
}
Run Code Online (Sandbox Code Playgroud)
正如评论所说,它应该看到1==1,然后2==2,最嵌套的条件2!=2失败,所以程序退出而不打印任何东西.但事实并非如此,相反它说2!=2:
$ javac A.java && java A
2 != 2
Run Code Online (Sandbox Code Playgroud)
为什么?
奇怪的是,它在Python中按预期工作:
>>> if (1 == 1):
... if (2 == 2):
... if (2 != 2):
... print("2 …Run Code Online (Sandbox Code Playgroud) python ×8
java ×2
coding-style ×1
cython ×1
easy-install ×1
go ×1
html ×1
html-parsing ×1
if-statement ×1
jinja2 ×1
nested ×1
osx-lion ×1
pandas ×1
performance ×1
python-2.7 ×1
readline ×1
regex ×1
string ×1
types ×1