我是一个Python新手(2周),我在格式化datetime.timedelta对象时遇到了麻烦.
这是我正在尝试做的事情:我有一个对象列表,该对象类的一个成员是一个timedelta对象,显示事件的持续时间.我希望以小时:分钟的格式显示该持续时间.
我已经尝试了各种方法来做到这一点,我遇到了困难.我目前的方法是为我的对象添加方法,返回小时和分钟.我可以通过将timedelta.seconds除以3600并将其四舍五入来获得小时数.我无法获得余数秒并将其转换为分钟.
顺便说一句,我正在使用Google AppEngine它Django Templates进行演示.
如果有人可以帮助或知道更好的解决方法,我会非常高兴.
谢谢,
有人能为我提供一个导入整个模块目录的好方法吗?
我有这样的结构:
/Foo
bar.py
spam.py
eggs.py
Run Code Online (Sandbox Code Playgroud)
我尝试通过添加__init__.py和执行将其转换为包,from Foo import *但它没有按照我希望的方式工作.
我正在教自己Python,我最近的教训是Python不是Java,因此我花了一些时间将所有的Class方法转换为函数.
我现在意识到我不需要使用Class方法来处理staticJava中的方法,但现在我不确定何时使用它们.我能找到的关于Python类方法的所有建议都是像我这样的新手应该避开它们,而标准文档在讨论时最不透明.
有没有人有一个在Python中使用Class方法的好例子,或者至少可以有人告诉我什么时候可以明智地使用Class方法?
如何在Python中打印深度为~4的字典呢?我尝试使用漂亮的打印pprint(),但它不起作用:
import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(mydict)
Run Code Online (Sandbox Code Playgroud)
我只想"\t"为每个嵌套设置一个缩进(),这样我得到这样的东西:
key1
value1
value2
key2
value1
value2
Run Code Online (Sandbox Code Playgroud)
等等
我怎样才能做到这一点?
最近我开始玩Python,我遇到了一些特殊的闭包方式.请考虑以下代码:
adders=[0,1,2,3]
for i in [0,1,2,3]:
adders[i]=lambda a: i+a
print adders[1](3)
Run Code Online (Sandbox Code Playgroud)
它构建了一个简单的函数数组,它接受单个输入并返回由数字添加的输入.函数在for循环中构造,迭代器i从中循环0到3.对于这些数字中的每一个,lambda都会创建一个函数i,该函数捕获并将其添加到函数的输入中.最后一行将第二个lambda函数3作为参数调用.令我惊讶的是输出结果是6.
我期待一个4.我的理由是:在Python中,一切都是一个对象,因此每个变量都是指向它的指针.在创建lambda闭包时i,我希望它存储一个指向当前指向的整数对象的指针i.这意味着当i分配一个新的整数对象时,它不应该影响先前创建的闭包.遗憾的是,adders在调试器中检查数组表明它确实存在.所有的lambda功能指的最后一个值i,3,这将导致adders[1](3)返回6.
这让我想知道以下内容:
lambda函数以更改其值i时不会受到影响的方式捕获当前i值?我有一套套装:
setlist = [s1,s2,s3...]
Run Code Online (Sandbox Code Playgroud)
我想要s1∩s2∩s3...
我可以通过执行一系列成对s1.intersection(s2)等来编写一个函数来完成它.
有推荐的,更好的或内置的方式吗?
我想循环遍历Python列表并一次处理2个列表项.用另一种语言这样的东西:
for(int i = 0; i < list.length(); i+=2)
{
// do something with list[i] and list[i + 1]
}
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?
在这个python示例之后,我将字符串编码为Base64,其中:
>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
Run Code Online (Sandbox Code Playgroud)
但是,如果我省略领先b:
>>> encoded = base64.b64encode('data to be encoded')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python32\lib\base64.py", line 56, in b64encode
raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我现在有了:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我希望:
[1, 2, 3]
+ + +
[4, 5, 6]
|| || ||
[5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
简单地添加两个列表的元素.
我肯定会迭代这两个列表,但我不想这样做.
什么是最Python的方式这样做的?
python ×10
list ×2
base64 ×1
class-method ×1
closures ×1
datetime ×1
dictionary ×1
file ×1
file-length ×1
for-loop ×1
format ×1
iteration ×1
lambda ×1
loops ×1
python-3.x ×1
set ×1
string ×1
timedelta ×1