GVKun编程网logo

它是pythonic:命名lambdas(python命名法规则)

19

本文的目的是介绍它是pythonic:命名lambdas的详细情况,特别关注python命名法规则的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解它是pythonic

本文的目的是介绍它是pythonic:命名lambdas的详细情况,特别关注python命名法规则的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解它是pythonic:命名lambdas的机会,同时也不会遗漏关于2.3.6 Python 匿名函数 lambda、lambda函数 python、Python defaultdict和lambda、Python lambda的知识。

本文目录一览:

它是pythonic:命名lambdas(python命名法规则)

它是pythonic:命名lambdas(python命名法规则)

我开始欣赏lambda表达式在python中的价值,尤其是在函数编程map,函数返回函数等方面。但是,我也一直在函数中命名lambda,因为:

  • 我多次需要相同的功能,并且不想重复代码。
  • 该功能特定于其出现的功能。它不需要其他地方。

当遇到满足以上条件的情况时,我一直在编写一个命名的lambda表达式,以进行DRY和狭义范围功能。例如,我正在编写一个在某些numpy数组上运行的函数,并且我需要对传递给该函数的所有数组进行适度繁琐的索引编制(可以很容易地放在一行上)。我编写了一个名为lambda表达式来进行索引编制,而不是编写整个其他函数或在整个函数定义中多次复制/粘贴索引。

def fcn_operating_on_arrays(array0, array1):    indexer = lambda a0, a1, idx: a0[idx] + a1[idx]    # codecodecode    indexed = indexer(array0, array1, indices)    # codecodecode in which other arrays are created and require `indexer`    return the_answer

这是对python的lambda的滥用吗?我应该吸收它并定义一个单独的功能吗?

答案1

小编典典

这不是Pythonic,PEP8不建议这样做:

始终使用def语句而不是将lambda表达式直接绑定到标识符的赋值语句。

是:

def f(x): return 2*x

没有:

f = lambda x: 2*x

第一种形式意味着结果函数对象的名称专门''f''代替了generic
''<lambda>''。通常,这对于回溯和字符串表示形式更为有用。使用赋值语句消除了lambda表达式可以提供的优于显式def语句的唯一好处(即,它可以嵌入较大的表达式中)

经验法则是考虑其定义:lambdas表达式是匿名函数。如果您命名,它将不再是匿名的。:)

2.3.6 Python 匿名函数 lambda

2.3.6 Python 匿名函数 lambda

#例1
#这段代码
def calc(x,y):
    return x**y

print(calc(2,5))

#换成匿名函数
calc = lambda x,y:x**y
print(calc(2,5))


''''''
lambda 不支持复杂的语句,最多支持三元运算
func = lambda x,y: if x > y: x*y 
''''''

#例2

def calc(x,y):
    if x<y:
        return x**y
    else:
        return x/y

func = lambda x,y: x*y if x<y else x/y


print(calc(2,5))
print(func(16,8))

匿名函数最主要的作用就是和其他函数配合使用

1.节省代码量

2.看着高级

例:


data = [1,3,5,7,9]

for i in data:
    print(i**2)

print(list(map(lambda x:x**2, data)))

 

lambda函数 python

lambda函数 python

lambda表达式是一行函数。
它们在其他语言中也被称为匿名函数。如果你不想在程序中对一个函数使用两次,你也许会想用lambda表达式,它们和普通的函数完全一样。

原型:lambda 参数:操作(参数)

例子:

>>> add = lambda x,y:x+y
>>> print(add(1,2))
3

lambda还可以在一些特殊情况下使用

1、列表排序

>>> a = [(1,2),(4,1),(9,10),(13,-3)]
>>> a.sort(key=lambda x:x[1])
>>> print(a)
[(13, -3), (4, 1), (1, 2), (9, 10)]
>>> a.sort(key = lambda x:x[0])
>>> print(a)
[(1, 2), (4, 1), (9, 10), (13, -3)]

 

Python defaultdict和lambda

Python defaultdict和lambda

在其他人的代码中,我阅读了以下两行:

x = defaultdict(lambda: 0)y = defaultdict(lambda: defaultdict(lambda: 0))

由于defaultdict的参数是默认工厂,因此我认为第一行表示当我为不存在的键k调用x [k](例如类似v = x [k]的语句)时,键值对(k
,0)会自动添加到字典中,就像首先执行语句x [k] = 0一样。我对么?

那y呢?似乎默认工厂将创建一个默认值为0的defaultdict。但这具体意味着什么?我试图在Python
shell中尝试使用它,但无法弄清楚它到底是什么。

答案1

小编典典

我认为第一行意味着当我要求x[k]一个不存在的键k(例如类似的语句v=x[k])时,键值对(k,0)将被自动添加到字典中,就像该语句x[k]=0首先执行一样。

那就对了。这是习惯用语

x = defaultdict(int)

对于y,当您执行时y["ham"]["spam"],如果密钥不存在"ham"y则将其插入。与之关联的值将变成一个defaultdict,其中"spam"将自动插入一个带有的值0

即,y是一种“两层” defaultdict。如果为"ham" not in y,则评估y["ham"]["spam"]就像在做

y["ham"] = {}y["ham"]["spam"] = 0

就普通而言dict

Python lambda

Python lambda

Python关于lambda表达式的小知识点

本篇内容 没有 对于lambda表达式的 全部介绍,只涉及基础了理解,和浅显的实例。

一 基本的介绍

def f(x):
    return x*x

f = lambda x: x*x

print(f(5))

上述两个代码的效果是相同的。

f 是函数的名字,lambda标志着 f 是一个 函数,冒号左边是输入量,右边是输出量。

如果遇到两个变量,例如 x 和 y ,那么:

def f(x):
    return x * y

f = lambda x,y:x*y

print(f(4,5))

输出是9。

 

二 对于排序很方便

lambda 对于排序很方便。

例如,你有个csv文件,名字叫做" countries.csv ":

http://www.wikidata.org/entity/Q114,肯尼亚,非洲,奈洛比,44353691
http://www.wikidata.org/entity/Q115,埃塞俄比亚,亚的斯亚贝巴,96958732
http://www.wikidata.org/entity/Q117,迦納,阿克拉,28308301
http://www.wikidata.org/entity/Q142,法国,欧洲,巴黎,66628000
http://www.wikidata.org/entity/Q145,英国,倫敦,65102385
http://www.wikidata.org/entity/Q148,中华人民共和国,亚洲,北京市,1409517397
http://www.wikidata.org/entity/Q155,巴西,南美洲,巴西利亚,200361925
http://www.wikidata.org/entity/Q159,俄罗斯,莫斯科,146804372
http://www.wikidata.org/entity/Q16,加拿大,北美洲,渥太華,35702707
http://www.wikidata.org/entity/Q17,日本,東京都,127110047

然后使用lambda对它进行处理,首先读取文件,将文件中的内容存入变量countires:

"""
开始读取文件
"""
countries = [] # 新建一个空的list,为了存储
file = open("countries.csv","r")
for line in file:
    line = line.strip() # 将前后多余空格给删掉
    arr = line.split(",") # 根据逗号,将内容区分开
    name = arr[1] # 提取国家
    capt = arr[3] # 提取首都
    popu = int(arr[4]) # 提取人口数量,不要忘记转int型
    countries.append((name,capt,popu))

"""
文件已经成功读取
"""

可以打印出来,看看效果:

for country in countries:
    print(country)

结果应该是根据原文件的顺序来打印的。

 

如果想要顺序打印,可以在打印之前,加入" countries.sort() ",这是python自带的函数。

 

如果根据你自己的喜好进行排序,可以使用使用 " countries.sort(key =____) ",其中____是你自定义的函数,根据return排序。

所以,你可以这样定义____:

def get_popu(country):
    return country[2]

总结一下,就是:

"""
文件读取完毕
"""
def get_popu(country):
        return country[2] # 选取人口

countries.sort(key=get_popu)

"""
开始打印
"""

不过,根据刚才学的,你可以这么写,舒服多了:

countries.sort(key=lambda country:country[2])

 

三 复合函数

如果有一个 f(x) = ax2+bx+c ,如果设计函数,那么f(a,b,c,x),这个看着很费力,要简化。

第一种可能:

def foo(a,c):
    return lambda x: a*x*x + b*x + c

f = foo(1,-1,2)

print(f(5))

# output: 22

如果再一次简化:

def foo(a,c):
    return lambda x: a*x*x + b*x + c

print( foo(1,2)(5) )


# output: 22

 

以上内容是对如下视频整理,没有进行严格编译,此博文仅作记录:up主:正月点灯笼

关于它是pythonic:命名lambdaspython命名法规则的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于2.3.6 Python 匿名函数 lambda、lambda函数 python、Python defaultdict和lambda、Python lambda等相关知识的信息别忘了在本站进行查找喔。

本文标签: