如果当前提交是合并提交,为什么不git rebase -i HEAD~~将其包含在我可以修改的提交中?
文档在哪里rebase说不能修改合并提交?
这是一个简单的设置,显示了我的意思:
git init test_git
cd test_git
touch a
git add a
git commit -m "added a"
git branch feature
git checkout feature
echo "version 1" >a
git commit -a -m "version 1"
git checkout master
echo "version 2" >a
git commit -a -m "version 2"
git merge feature
echo "version 3" >a
git commit -a -m "resolved merge"
git rebase -i HEAD~~
Run Code Online (Sandbox Code Playgroud)
此时,我收到带有以下消息的文本编辑器:
pick 6746909 version 2
pick 830dbd0 version 1 …Run Code Online (Sandbox Code Playgroud) 显然,这只是我用来理解Haskell的一个例子.我不打算使用冒泡排序进行排序,我也不打算通过二次算法中的列表来优化单个迭代.
当列表已经排序时,我希望停止冒泡排序.我编写了这段代码,bubble返回作为元组中的第二项,布尔状态告诉调用者是否进行了交换:
bubble (x:y:ys)
| x > y = (y : fst (bubble (x:ys)), True)
| otherwise = (x : fst (bubble (y:ys)), snd (bubble (y:ys)))
bubble x = (x, False)
bubblesort xs
| snd (bubble xs) = bubblesort (fst (bubble xs))
| otherwise = fst (bubble xs)
Run Code Online (Sandbox Code Playgroud)
在我熟悉的语言中,它会非常低效,因为如果没有明确的记忆bubble (y:ys),bubble xs它将被重新计算两次.但鉴于Haskell函数没有副作用,我可以假设编译器会优化重复的调用,使我的代码有效吗?
如果没有,那么编写高效冒泡排序的好方法是什么?
我已经看到了检查列表是否排序的方法:
bubbleSort (x:y:xs) = if sorted thisSort then thisSort else bubbleSort thisSort
where thisSort = (min x y) : bubbleSort …Run Code Online (Sandbox Code Playgroud) goroutine大致相当于python的asyncio任务,还有一个额外的功能,即任何CPU绑定的任务都被路由到一个ThreadPoolExecutor而不是被添加到事件循环中(当然,假设我们使用没有GIL的python解释器)?
我失踪的两种方法之间有什么实质性的区别吗?当然,除了并发性是Go的一个组成部分所带来的效率和代码清晰度之外.
我理解为什么Python self在引用实例属性时需要显式限定符.
但我经常忘记它,因为我在C++中不需要它.
我用这种方式介绍的错误有时候很难捕捉到; 例如,假设我写
if x is not None:
f()
Run Code Online (Sandbox Code Playgroud)
代替
if self.x is not None:
f()
Run Code Online (Sandbox Code Playgroud)
假设属性x通常None,所以f()很少叫.并且假设f()仅产生微妙的副作用(例如,数值的改变,或清除缓存等).除非我有疯狂的单元测试,否则这个错误很可能会长时间被忽视.
我想知道是否有人知道编码技术或IDE功能可以帮助我捕获或避免这种类型的错误.
我需要解析一些文本文件,为文本中遇到的各种实体创建对象,并将它们放在一些数据结构(例如,列表)中以供进一步处理.文字示例:
laptop
17" dell, weight: 12 lb
desktop
24" hp
Run Code Online (Sandbox Code Playgroud)
我事先知道文本中可能存在哪些实体,以及它们应该具有哪些属性.在这个例子中,我已经定义了笔记本电脑和桌面类(可能是类计算机的子类).解析器只需要创建对象laptop('dell',17,12)和dekstop('hp',24).
如果我遵循这条路线,我需要从字符串中检索类名,并创建这些类的对象.这是Pythonic的做事方式吗?如果是这样,最好的方法是什么(使用Python 3.1)?如果没有,我该怎么办呢?
谢谢!
什么
我正在尝试使用 tkinter 定期刷新方形网格。网格中的每个方块都涂上某种颜色(比如从给定的函数中获得);在每个正方形的中心,绘制一个较小的圆圈(颜色也是从函数中获得的)。
如果我必须从头开始做,也许有我可以使用的示例或标准配方?
作为其他一些计算的一部分,我注意到我有时应用float()然后int()函数为整数输入.可以安全地假设:
int(float(x)) == x
Run Code Online (Sandbox Code Playgroud)
如果x是整数?
为什么?(或者为什么不呢?)它是否记录在任何地方?
我有(在Python 3中):
print('event {} happened on these dates: {}'.format(event_name, date_list))
Run Code Online (Sandbox Code Playgroud)
我date_list是一个datetime.date对象列表.我想改变格式:
事件A发生在[datetime.date(2011,5,31),datetime.date(2011,6,15)]
至
事件A发生在[2011-05-31,2011-06-15]
实现这一目标的最佳方法是什么?我希望我能继续使用这个format()功能,但我不知道怎么做.
Python中的标准做法是None用作默认参数值.
但是,如果客户端代码可以None用作合法参数值,则这种惯用法不会很好.在这种情况下,函数无法判断客户端代码是否省略了参数,或者是否显式传递了该参数None.这不好,除非(幸运的是)函数的行为在两种情况下都应该相同.
什么是好的解决方案?
许多人都发表了这样的评论,但没有人给出它不好的原因。
还有什么方法可以捕获用户输入错误?等待其他地方的某些代码“抛出异常?” 为什么不立即捕获错误更好呢?
例如,(ab)用户输入 17.6 以获得预期的整数响应。这显然是一个错误,获取了预期类型的类型(只是为了清楚?)。floatint
或者,假设该(ab)用户甚至输入 17/6 作为预期的float. 17/6是一个float,因此如果等待数据到达实际使用的位置,则很难捕获此错误。
我不明白这个前提。
=========================== 以下是根据许多(非常好的)回复进行的编辑 - 感谢所有人!
首先,我相信所有编码风格都基于人们的意见,这些人已经学会根据他们遇到的一些错误提出这些意见。所以,是的,根据定义,由于这是一个编码风格的问题,所有答案都可能基于意见或导致那里的经验。
其次,我现在从评论中了解到,在函数中输入后测试类型。非常感谢您提供的示例和解释。
第三,正如许多评论所指出的那样,也许“类型测试不好”的意识形态应该在测试输入之后进行一些解释。这是我对我所做的搜索的许多回复中提出的笼统声明,试图测试在我的代码中获得的人工输入。
再次非常感谢你们分享的所有知识。
python ×6
python-3.x ×5
class ×1
concurrency ×1
coroutine ×1
debugging ×1
formatting ×1
function ×1
git ×1
go ×1
haskell ×1
printing ×1
self ×1
string ×1
tkinter ×1
typechecking ×1