lambda python用法菜鳥,pythonlambda多行

大家好,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.resource-tj.com/ruanjian/29509.html