本文的目的是介绍它是pythonic:命名lambdas的详细情况,特别关注python命名法规则的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解它是pythonic
本文的目的是介绍它是pythonic:命名lambdas的详细情况,特别关注python命名法规则的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解它是pythonic:命名lambdas的机会,同时也不会遗漏关于2.3.6 Python 匿名函数 lambda、lambda函数 python、Python defaultdict和lambda、Python lambda的知识。
本文目录一览:- 它是pythonic:命名lambdas(python命名法规则)
- 2.3.6 Python 匿名函数 lambda
- lambda函数 python
- Python defaultdict和lambda
- Python lambda
它是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
#例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
表达式是一行函数。
它们在其他语言中也被称为匿名函数。如果你不想在程序中对一个函数使用两次,你也许会想用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
在其他人的代码中,我阅读了以下两行:
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表达式的小知识点
本篇内容 没有 对于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:命名lambdas和python命名法规则的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于2.3.6 Python 匿名函数 lambda、lambda函数 python、Python defaultdict和lambda、Python lambda等相关知识的信息别忘了在本站进行查找喔。
本文标签: