lambda python用法菜鸟,pythonlambda多行
- 软件开发
- 2023-09-21
- 474
大家好,lambda python用法菜鸟相信很多的网友都不是很明白,包括pythonlambda多行也是一样,不过没有关系,接下来就来为大家分享关于lambda py...
大家好,lambda python用法菜鸟相信很多的网友都不是很明白,包括pythonlambda多行也是一样,不过没有关系,接下来就来为大家分享关于lambda python用法菜鸟和pythonlambda多行的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
filter函数的用法注意事项
1.filter函数接收两个参数:待过滤序列和过滤函数。
2.过滤函数需要返回True或False。
3.过滤函数可以是内置函数也可以是自定义函数。
4.如果过滤函数没有指定,默认是bool函数。
5.filter函数返回的是一个迭代器,可以使用list()函数将其转换为列表。
6.filter函数不会修改原有的序列,只会返回符合条件的元素。
7.对于需要判断的条件较为复杂的过滤函数,可以考虑使用lambda表达式来简化代码。
8.如果想以容器(List)的形式返回过滤后的结果请使用toList(),如果想以集合(Set)的形式返回,请使用toSet()。
能不能自学python,会不会太难
作为一名计算机专业的教育工作者,我来回答一下这个问题。
首先,对于已经具备一定编程基础的同学来说,学习Python的初期还是相对比较容易的,但是要想找到一份Python开发岗位,还需要做好三方面的准备。
其一是要选择一个主攻方向,这对于就业的影响是非常明显的。Python语言是一门典型的全场景编程语言,在Web开发、大数据开发、人工智能开发、嵌入式开发等领域都有所应用,所以要选择一个自己的主攻领域,然后按照该领域的岗位需求来制定学习计划。
其二是根据自身的知识基础和能力特点来选择一个岗位类型,目前采用Python的岗位类型可以分成三大类,分别是算法岗、研发岗和应用开发岗,不同岗位对于知识结构的要求有所不同。从近几年的人才需求情况来看,开发岗的人才需求量相对大一些,而且对于开发人员的整体要求也并不算高。
其三是为自己构建一个实践和交流场景,学习编程语言一定要有场景的支持,否则很难深入学习。虽然目前Python语言的应用场景非常多,但是人才招聘量却并不算大,而且很多岗位都集中在大数据、人工智能领域,这些领域对于从业者的要求往往也比较高,比如学历等,所以如果想在Python技术领域走得更远,可以重点考虑读一下研究生。
从学习的顺序上来说,初学者可以先按照Web开发路线来学习,一方面Web开发的入门难度相对比较低,另一方面Web开发的参考资料也非常丰富,即使采用自学的方式,也会有一个较好的学习体验。在完成了Web入门之后,可以结合自身的实际情况,选择一个主攻方向。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以私信我!
一行Python,你可以做什么
继“你看过/写过哪些有意思的代码”后,小慕又收到关于Python的战帖,这怎么能怂?快快接招吧!
发功之前友情提示:部分案例适用于Python3,在Windows下面可以用Python命令代替,具体请根据自己的修行选择。
一、江湖纯情版1、爱心
先来个高赞爱心的中英文结合版:
print'\n'.join([''.join([(u'ILoveChina爱'[(x-y)%11]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0else'')forxinrange(-30,30)])foryinrange(15,-15,-1)])如果换成纯汉字的版本,则可能会出现较明显的变形,所以为保证妹子不理解成“变心”,建议使用中英文结合的方式。你get到了吗?
2、美丽的螺旋
或许你觉得心型图案太俗套,那么试试下面这个美丽的螺旋?在python编译器中输入下面的代码,接下来让我们来见证奇迹吧!
exec"""\nfromturtleimport*\nforiinrange(500):\nforward(i)\nleft(91)\n"""二、娱乐纵情版1、猜数字
无聊的时候,猜猜数字也是很有乐趣的嘛。1~99范围内的整数,如果猜对了会给你一个“Y”,如果猜高了会给出一个“H”;猜低了,你会得到一个“L”(Y、H、L可以根据你希望它给出的提示进行更换),你有六次机会猜出正确的结果哦!
python3-c"importrandom;n=random.randint(1,99);[(lambdaa:print('Y'ifa==nelse'H'ifa>nelse'L'))(int(input()))foriinrange(6)]”2、老虎机
猜数字不过瘾?不如再来试试迷你老虎机,用随机的unicode字符打样出来,完美模拟了老虎机的效果!
python3-c"importrandom;p=lambda:random.choice('7');[print('|'.join([p(),p(),p()]),end='\r')foriinrange(8**5)]”3、一行代码帮你选彩票号码
当然,还有更刺激的彩票摇号,不过与其将命运交给彩票站的投注机器,不如自己写一行代码,喏,彩票选号代码了解一下:
python-c"fromrandomimportsample;print'Lottonumbers:%s'%sample(range(1,50),6)"友情提示:彩票有风险,出手须谨慎,至于这行代码给出的结果是否能够中奖,那就只能看你的运气啦!
三、学府深造版1、一行代码实现GUI用户界面
python-c"fromTkinterimport*;root=Tk();w=Label(root,text='你好!慕课网!');w.pack();root.mainloop()”一行代码实现GUI用户界面有木有!
2、一行代码启动一个http服务器
一行代码可以启动一个HTTP服务器,这一点真的非常好用,所以尽管有其他答主提到过,还是忍不住要再分享一下!
python3-mhttp.server8888在本地,输入网址localhost:8888即可访问,默认会列出你的本地目录:
3、Python的哲学
每次读到Python之禅的时候,总是情不自禁地陷入优美的意境不能自拔,恨不能随时随地都能拿来拜读?下面这行代码能够满足你的愿望:
python-c"importthis"回车!然后,你便会发现你的屏幕上已然出现了心心念念的Python的ZEN(禅意)。神不神奇?惊不惊喜?
4、简易计算器
print(eval(input()))这个单行代码只用了默认引入的函数,其意义也是单纯而透明:读入一个python表达式并求值,将其结果输出到屏幕,当个简单计算器绰绰有余。
5、今天距离明年元旦还有多少天?
不会跟妹子搭讪?教你一招搭讪大法:故作神秘地问她知不知道还有多少天就是明年的元旦了,趁妹子一脸懵掉你打开编译器,潇洒地敲出以下这行代码,然后看着结果告诉她:你看,距离明年元旦还有XX天!
python-c"""importdatetime;today=datetime.date.today();someday=datetime.date(2019,1,1);diff=someday-today;printstr(diff.days)+'days'“""妹子接下来可能会有一波感叹:哎呀,还有XX天了?日子过得真快啊!
然后你转手将代码一改,把元旦的时间改为你和妹子认识的时间,然后跟妹子说:你看,我们都认识这么久了,还没一起吃过饭呢,不如今晚下班请你吃个饭?
接下来,一定要记得按时下班啊!
其实,就单行而言,Python并不会比其它的多范式语言更强,实际上由于lambda表现能力弱,导致Python本身要更弱一些。
但是,存在lambda就存在无限可能。Python中的import语句是可以通过调用__builtin__模块中的__import__来代替的,更有意思的是,__builtin__模块内的所有内容均是自动import的。
四、附加武功秘籍1、换脸术
这个10进制转换16进制的单行代码就是lambda无限可能的有力论证:
print("#"+''.join(["{:0>2}".format(hex(int(a))[2:])forain__import__('sys').argv[1:]]))2、星罗阵
这样的画图,只是简单的用到了调用时传递参数而已。
[print('\n'.join(""*abs(c)+"*"*(a-abs(c))forcinrange(-a+1,a)))forain[int(__import__('sys').argv[1])]]3、操控术
如果调用更复杂的功能呢?例如用Flask来个Helloworld?
[y[0].run()foryin[(x,x.route('/')(lambda:'Hello,world!'))forxin[__import__('flask').Flask(__name__)]]]使用列表生成的实现看起来可能不太优雅,但并不会影响效果。
4、凌波微步
或者你还想看看带窗口的心形曲线?不要看那个黑黑的ASCII颜艺的话可以这样(需要numpy和matplotlib)
[plt.show()for_,__,___,pltin[(plt.plot(x,y1,color='r'),plt.plot(x,y2,color='r'),np,plt)forx,y1,y2,np,pltin[(x,0.618*np.abs(x)-0.8*np.sqrt(64-x**2),0.618*np.abs(x)+0.8*np.sqrt(64-x**2),np,plt)forx,np,pltin[(np.linspace(-8,8,1024),np,plt)fornp,pltin[(__import__('numpy'),__import__('pylab'))]]]]]5、吸星大法
如果你是深度学习炼丹师,那不妨来个一行预测?
[print(decode(model.predict(x)))formodel,x,decodein[(ResNet50(weights='imagenet'),preprocess_input(np.expand_dims(image.img_to_array(image.load_img('elephant.jpg',target_size=(224,224))),axis=0)),decode)forResNet50,image,preprocess_input,np,decodein[(kav.applications.resnet50.ResNet50,kp.preprocessing.image,kav.applications.resnet50.preprocess_input,np,kav.applications.resnet50.decode_predictions)forkav,kp,npin[(__import__('keras.applications.resnet50'),__import__('keras.preprocessing.image'),__import__('numpy'))]]]]按照这样的方法,几乎所有的代码最终都能压到同一行里;配合Python各种强大的包,写出个一行人脸识别、一行机器学习、一行网页爬虫等都不会有什么问题。
综上,“一行代码”可供修炼的“功夫”多种多样,虽然有趣,但并没有太多的实际意义,在实际工作中没有必要强行把所有的代码都压缩到一行中实现。当然,如果是为了向妹子炫技的话,那么请尽管展示你的才华!
程序员学习交流请添加慕课网官方客服微信:mukewang666回复暗号“前端面试”可进前端交流群回复暗号“Java”可进Java交流群回复暗号“专栏”可进程序员交流群推荐阅读:
计算机专业同学如何避免自己成为一名低级码农?https://www.wukong.com/question/6546119457276690691/在做程序员的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?https://www.wukong.com/question/6517473209128845575/大公司和小公司的程序员差别在哪?https://www.wukong.com/question/6514834007652303108/程序员面试的时候,大家都中过什么套路?https://www.wukong.com/question/6481413885956981005/你见过有哪些搞笑的代码?https://www.wukong.com/question/6532626072771494147/程序员很闷骚么?https://www.wukong.com/question/6492183419819131150/Python有什么奇技淫巧
Python奇技淫巧
当发布python第三方package时,并不希望代码中所有的函数或者class可以被外部import,在__init__.py中添加__all__属性,
该list中填写可以import的类或者函数名,可以起到限制的import的作用,防止外部import其他函数或者类
#!/usr/bin/envpython
#-*-coding:utf-8-*-
frombaseimportAPIBase
fromclientimportClient
fromdecoratorimportinterface,export,stream
fromserverimportServer
fromstorageimportStorage
fromutilimport(LogFormatter,disable_logging_to_stderr,
enable_logging_to_kids,info)
__all__=['APIBase','Client','LogFormatter','Server',
'Storage','disable_logging_to_stderr','enable_logging_to_kids',
'export','info','interface','stream']
with的魔力
with语句需要支持上下文管理协议的对象,上下文管理协议包含__enter__和__exit__两个方法.with语句建立运行时上下文需要通过这两个方法执行进入和退出操作.
其中上下文表达式是跟在with之后的表达式,该表示大返回一个上下文管理对象
#常见with使用场景
withopen("test.txt","r")asmy_file:#注意,是__enter__()方法的返回值赋值给了my_file,
forlineinmy_file:
printline
详细原理可以查看这篇文章,浅谈Python的with语句
知道具体原理,我们可以自定义支持上下文管理协议的类,类中实现__enter__和__exit__方法
#!/usr/bin/envpython
#-*-coding:utf-8-*-
classMyWith(object):
def__init__(self):
print"__init__method"
def__enter__(self):
print"__enter__method"
returnself#返回对象给as后的变量
def__exit__(self,exc_type,exc_value,exc_traceback):
print"__exit__method"
ifexc_tracebackisNone:
print"ExitedwithoutException"
returnTrue
else:
print"ExitedwithException"
returnFalse
deftest_with():
withMyWith()asmy_with:
print"runningmy_with"
print"------分割线-----"
withMyWith()asmy_with:
print"runningbeforeException"
raiseException
print"runningafterException"
if__name__=='__main__':
test_with()
执行结果如下:
__init__method
__enter__method
runningmy_with
__exit__method
ExitedwithoutException
------分割线-----
__init__method
__enter__method
runningbeforeException
__exit__method
ExitedwithException
Traceback(mostrecentcalllast):
File"bin/python",line34,in
exec(compile(__file__f.read(),__file__,"exec"))
File"test_with.py",line33,in
test_with()
File"test_with.py",line28,intest_with
raiseException
Exception
证明了会先执行__enter__方法,然后调用with内的逻辑,最后执行__exit__做退出处理,并且,即使出现异常也能正常退出
filter的用法
相对filter而言,map和reduce使用的会更频繁一些,filter正如其名字,按照某种规则过滤掉一些元素
#!/usr/bin/envpython
#-*-coding:utf-8-*-
lst=[1,2,3,4,5,6]
#所有奇数都会返回True,偶数会返回False被过滤掉
printfilter(lambdax:x%2!=0,lst)
#输出结果
[1,3,5]
一行作判断
当条件满足时,返回的为等号后面的变量,否则返回else后语句
lst=[1,2,3]
new_lst=lst[0]iflstisnotNoneelseNone
printnew_lst
#打印结果
1
装饰器之单例
使用装饰器实现简单的单例模式
#单例装饰器
defsingleton(cls):
instances=dict()#初始为空
def_singleton(*args,**kwargs):
ifclsnotininstances:#如果不存在,则创建并放入字典
instances[cls]=cls(*args,**kwargs)
returninstances[cls]
return_singleton
@singleton
classTest(object):
pass
if__name__=='__main__':
t1=Test()
t2=Test()
#两者具有相同的地址
printt1,t2
staticmethod装饰器
类中两种常用的装饰,首先区分一下他们
普通成员函数,其中第一个隐式参数为对象
classmethod装饰器,类方法(给人感觉非常类似于OC中的类方法),其中第一个隐式参数为类
staticmethod装饰器,没有任何隐式参数.python中的静态方法类似与C++中的静态方法
#!/usr/bin/envpython
#-*-coding:utf-8-*-
classA(object):
#普通成员函数
deffoo(self,x):
print"executingfoo(%s,%s)"%(self,x)
@classmethod#使用classmethod进行装饰
defclass_foo(cls,x):
print"executingclass_foo(%s,%s)"%(cls,x)
@staticmethod#使用staticmethod进行装饰
defstatic_foo(x):
print"executingstatic_foo(%s)"%x
deftest_three_method():
obj=A()
#直接调用噗通的成员方法
obj.foo("para")#此处obj对象作为成员函数的隐式参数,就是self
obj.class_foo("para")#此处类作为隐式参数被传入,就是cls
A.class_foo("para")#更直接的类方法调用
obj.static_foo("para")#静态方法并没有任何隐式参数,但是要通过对象或者类进行调用
A.static_foo("para")
if__name__=='__main__':
test_three_method()
#函数输出
executingfoo(
executingclass_foo(
executingclass_foo(
executingstatic_foo(para)
executingstatic_foo(para)
property装饰器
定义私有类属性
将property与装饰器结合实现属性私有化(更简单安全的实现get和set方法)
#python内建函数
property(fget=None,fset=None,fdel=None,doc=None)
fget是获取属性的值的函数,fset是设置属性值的函数,fdel是删除属性的函数,doc是一个字符串(likeacomment).从实现来看,这些参数都是可选的
property有三个方法getter(),setter()和delete()来指定fget,fset和fdel。这表示以下这行
classStudent(object):
@property#相当于property.getter(score)或者property(score)
defscore(self):
returnself._score
@score.setter#相当于score=property.setter(score)
defscore(self,value):
ifnotisinstance(value,int):
raiseValueError('scoremustbeaninteger!')
ifvalue100:
raiseValueError('scoremustbetween0~100!')
self._score=value
iter魔法
通过yield和__iter__的结合,我们可以把一个对象变成可迭代的
通过__str__的重写,可以直接通过想要的形式打印对象
#!/usr/bin/envpython
#-*-coding:utf-8-*-
classTestIter(object):
def__init__(self):
self.lst=[1,2,3,4,5]
defread(self):
foreleinxrange(len(self.lst)):
yieldele
def__iter__(self):
returnself.read()
def__str__(self):
return','.join(map(str,self.lst))
__repr__=__str__
deftest_iter():
obj=TestIter()
fornuminobj:
printnum
printobj
if__name__=='__main__':
test_iter()
神奇partial
partial使用上很像C++中仿函数(函数对象).
在stackoverflow给出了类似与partial的运行方式
defpartial(func,*part_args):
defwrapper(*extra_args):
args=list(part_args)
args.extend(extra_args)
returnfunc(*args)
returnwrapper
利用用闭包的特性绑定预先绑定一些函数参数,返回一个可调用的变量,直到真正的调用执行
#!/usr/bin/envpython
#-*-coding:utf-8-*-
fromfunctoolsimportpartial
defsum(a,b):
returna+b
deftest_partial():
fun=partial(sum,2)#事先绑定一个参数,fun成为一个只需要一个参数的可调用变量
printfun(3)#实现执行的即是sum(2,3)
if__name__=='__main__':
test_partial()
#执行结果
5
神秘eval
eval我理解为一种内嵌的python解释器(这种解释可能会有偏差),会解释字符串为对应的代码并执行,并且将执行结果返回
看一下下面这个例子
#!/usr/bin/envpython
#-*-coding:utf-8-*-
deftest_first():
return3
deftest_second(num):
returnnum
action={#可以看做是一个sandbox
"para":5,
"test_first":test_first,
"test_second":test_second
}
deftest_eavl():
condition="para==5andtest_second(test_first)>5"
res=eval(condition,action)#解释condition并根据action对应的动作执行
printres
if__name__=='_
exec
exec在Python中会忽略返回值,总是返回None,eval会返回执行代码或语句的返回值
exec和eval在执行代码时,除了返回值其他行为都相同
在传入字符串时,会使用compile(source,'
#!/usr/bin/envpython
#-*-coding:utf-8-*-
deftest_first():
print"hello"
deftest_second():
test_first()
print"second"
deftest_third():
print"third"
action={
"test_second":test_second,
"test_third":test_third
}
deftest_exec():
exec"test_second"inaction
if__name__=='__main__':
test_exec()#无法看到执行结果
getattr
getattr(object,name[,default])Returnthevalueof
thenamedattributeofobject.namemustbeastring.Ifthestringis
thenameofoneoftheobject’sattributes,theresultisthevalueof
thatattribute.Forexample,getattr(x,‘foobar’)isequivalentto
x.foobar.Ifthenamedattributedoesnotexist,defaultisreturnedif
provided,otherwiseAttributeErrorisraised.
通过string类型的name,返回对象的name属性(方法)对应的值,如果属性不存在,则返回默认值,相当于object.name
#使用范例
classTestGetAttr(object):
test="testattribute"
defsay(self):
print"testmethod"
deftest_getattr():
my_test=TestGetAttr()
try:
printgetattr(my_test,"test")
exceptAttributeError:
print"AttributeError!"
try:
getattr(my_test,"say")()
exceptAttributeError:#没有该属性,且没有指定返回值的情况下
print"MethodError!"
if__name__=='__main__':
test_getattr()
#输出结果
testattribute
testmethod
命令行处理
defprocess_command_line(argv):
"""
Returna2-tuple:(settingsobject,argslist).
`argv`isalistofarguments,or`None`for``sys.argv[1:]``.
"""
ifargvisNone:
argv=sys.argv[1:]
#initializetheparserobject:
parser=optparse.OptionParser(
formatter=optparse.TitledHelpFormatter(width=78),
add_help_option=None)
#defineoptionshere:
parser.add_option(#customizeddescription;put--helplast
'-h','--help',action='help',
help='Showthishelpmessageandexit.')
settings,args=parser.parse_args(argv)
#checknumberofarguments,verifyvalues,etc.:
ifargs:
parser.error('programtakesnocommand-linearguments;'
'"%s"ignored.'%(args,))
#furtherprocesssettings&argsifnecessary
returnsettings,args
defmain(argv=None):
settings,args=process_command_line(argv)
#applicationcodehere,like:
#run(settings,args)
return0#success
if__name__=='__main__':
status=main()
sys.exit(status)
读写csv文件
#从csv中读取文件,基本和传统文件读取类似
importcsv
withopen('data.csv','rb')asf:
reader=csv.reader(f)
forrowinreader:
printrow
#向csv文件写入
importcsv
withopen('data.csv','wb')asf:
writer=csv.writer(f)
writer.writerow(['name','address','age'])#单行写入
data=[
('xiaoming','china','10'),
('Lily','USA','12')]
writer.writerows(data)#多行写入
各种时间形式转换
只发一张网上的图,然后差文档就好了,这个是记不住的
字符串格式化
一个非常好用,很多人又不知道的功能
>>>name="andrew"
>>>"mynameis{name}".format(name=name)
'mynameisandrew'
python switch case语句的用法
在Python中,虽然没有类似于其他编程语言(如C、C++、Java等)的switch-case语句,但可以使用`if-elif-else`结构来实现类似的功能。以下是一个示例:
```python
defswitch_case(value):
ifvalue==1:
print("Option1")
elifvalue==2:
print("Option2")
elifvalue==3:
print("Option3")
else:
print("Invalidoption")
value=int(input("Enteravalue(1,2,or3):"))
switch_case(value)
```
在这个示例中,我们定义了一个名为`switch_case`的函数,该函数接受一个参数`value`。根据`value`的不同,我们使用`if-elif-else`结构来执行不同的操作。
用户输入一个值(1、2或3),并将其存储在变量`value`中。然后调用`switch_case`函数并传入`value`参数。根据输入的值,函数将输出相应的选项。
虽然Python没有内置的switch-case语句,但使用`if-elif-else`结构可以实现类似的功能。这种方式更具灵活性,因为Python的`if`语句可以在条件为真时执行任意代码,而不仅限于一个语句。
OK,关于lambda python用法菜鸟和pythonlambda多行的内容到此结束了,希望对大家有所帮助。
本文链接:http://www.xinin56.com/ruanjian/29509.html