小编Nik*_*Nik的帖子

奇怪的行为:函数的三元运算符

这是我的问题的简化示例.我认为这些函数会有完全相同的行为:

def f1(l):
    if type(l[0][0])==list: f=lambda x:x[0][0]
    else: f=lambda x:x[0]
    l.sort(key=f,reverse=True)

def f2(l):
    f=lambda x:x[0][0] if type(l[0][0])==list else lambda x:x[0]
    l.sort(key=f,reverse=True)

l=[[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)

但实际上,f1(l)f2(l)异常崩溃时工作正常:

IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

所以问题是为什么会这样,是否可以使用三元运算符来返回其中一个函数?

python function ternary-operator

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

如何将空参数传递给python函数?

这是工作代码:

def g(y=10):
    return y**2

def f(x,y=10):
    return x*g(y)

print(f(5)) #->500
Run Code Online (Sandbox Code Playgroud)

但是,假设我们不想记住并将关键字参数的默认值复制y到外部函数的定义中(特别是如果有多层外部函数).在上面的例子中,它意味着我们想要使用已经定义的参数g.

一种方法:

def f(x,y=None):
    if y==None: return x*g()
    else: return x*g(y)
Run Code Online (Sandbox Code Playgroud)

但有没有更清洁的方法来做同样的事情?就像是:

def f(x,y=empty()):
    return x*g(y)
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

OrderedDict 子项的深层副本

我已经尝试过deepcopyfromcopy模块。它适用于 OrderedDict 实例和 dict child 实例。但它不适用于 OrderedDict 子实例。这是一个演示:

from collections import OrderedDict
from copy import deepcopy

class Example2(dict):
    def __init__(self,l):
        dict.__init__(self,l)

class Example3(OrderedDict):
    def __init__(self,l):
        OrderedDict.__init__(self,l)

d1=OrderedDict([(1,1),(2,2)]) 
print(deepcopy(d1))           #OrderedDict([(1, 1), (2, 2)])

d2=Example2([(1,1),(2,2)])
print(deepcopy(d2))           #{1: 1, 2: 2}

d3=Example3([(1,1),(2,2)])
print(deepcopy(d3))
Run Code Online (Sandbox Code Playgroud)

前两个示例按预期工作,但最后一个因异常而崩溃:

TypeError: __init__() missing 1 required positional argument: 'l'
Run Code Online (Sandbox Code Playgroud)

所以问题是:这里的实际问题是什么,是否可以在deepcopy这种情况下使用该功能?

python ordereddictionary

4
推荐指数
1
解决办法
5884
查看次数