Python14 函數

函數

面向對象編程: 類----class

面向過程編程:過程---def

函數式編程:函數---def

def test(x):'''描述'''x +=1return x#def是定義函數的關鍵字#test是函數名稱#(x)是參數#x+=1是 函數體,是一段邏輯代碼#return 定義返回值,返回給test函數 ,并結束函數    

1.

def func1():'''test'''print ('in the func1')return 0#函數式編程def func2():'''test2'''print ('in the func2')#定義面向過程的函數,沒有return;  過程就是沒有返回值的函數
x = func1()
y = func2()print ('from func1 return is %s' %x)
print ('from func2 return is %s' %y)

image_1c0ai6ka017t3ukvlhs1nfh18dk9.png-3.9kB
雖然過程函數沒有return,但是python會隱式的給返回一個None,所以兩者差別并不大

2.

def logger():with open('test.txt','a') as f:f.write('end action\n')def test1():print('in the test1')logger()def test2():print('in the test2')logger()def test3():print('in the test3')logger()test1()        #執行函數
test2()
test3()#可以看到三個函數都調用了logger這個函數,否則的話,我們需要在每三個函數中都要寫#with open這些代碼; 調用了logger函數的話,就免去寫重復的代碼了。

我們要在三個函數每次寫入的時候都加入時間戳

import timedef logger():time_format = '%Y-%m-%d  %X'    #定義格式為年、月、日、小時分鐘秒time_current = time.strftime(time_format)   #顯示時間,以time_format定義的格式來顯示with open('test.txt','a') as f:f.write('%s end action\n' %time_current)#修改logger函數,這樣test的三個函數就全都被修改了。#時間格式%后面的字母根據大小寫的不同,顯示的格式也不同。

image_1c0ai9j5n1rqapjrcot58hi0m.png-11.7kB
執行后看到文檔內容

定義函數的好處:
代碼重用
保持一致性(修改代碼不會因為認為的原因導致相同的代碼寫錯后不一致)
可擴展性

3.

image_1c0aic33g197k1jihg4t1qhoj2413.png-8.7kB
image_1c0aic8ml1s5obmk17u0cb2c0e1g.png-0.9kB
return除了會返回值給函數,還終止函數的運行,所以后面的print沒有打印。

s = test()
print (s)

image_1c0aictks1mik8ou11nk17f17ei1t.png-1.3kB
return 將0返回給了test函數,賦值變量后,這個變量就等于這個return的值。
return幾乎可以返回任何類型

為什么要用return,return的作用是什么: 在編程使用函數時,可能代碼會很多,然后根據不同的結return不同的值,根據不同的值可以用作下面代碼的判斷,然后做不同的動作; 比如根據True或False,下面的代碼執行不同的操作。

image_1c0aidg4k1nufe0g1d3i2mmncp2a.png-23kB
定義三個函數,一個沒有return,一個return單個元素數字,一個return多個元素
image_1c0aidpm8m501m451hfki6nj6n2n.png-4.4kB
沒有return默認返回None
return單個元素,會正常返回定義的值
return多個元素,會通過元組返回(相當于一個打包,然后一起返回)

4.

image_1c0aiesfn14lmhm3a4lgbu18qd34.png-4.8kB
定義帶參數的函數
image_1c0aif63u197j1c1c1q281tek7rd3h.png-12.1kB
調用函數時,如果不賦值給參數就會報錯

image_1c0aigj591cnb11ma17jj1b3v1195e.png-5.1kB
賦值給參數,位置要對應.
image_1c0aigter1rdf10os11eqgtud3n5r.png-0.5kB
1賦值給了x
2賦值給了y
x與y叫做形參:需要引用、被賦值的參數
1與2叫做實參:實際的參數
1與2是真是存在的,會在內存中占用空間;x與y是形式上的參數,如果x與y沒有引用任何值,則不會占用內存空間。

image_1c0aihlnd1n9jh8t1nagkeh12lg68.png-5.6kB
默認的情況下,賦值參數需要位置一 一對應,否則的話就需要指定參數的賦值
image_1c0aihvff4a02911tnc1qin1du6l.png-0.5kB

image_1c0aii5ao1a2me75flm1heq1tqp72.png-6.4kB
位置參數和關鍵詞參數是可以混寫的,默認參數需要位置對應,1賦值給了x,2賦值給了y
image_1c0aiifeo1vvhl2o151p190vrk67f.png-0.8kB

image_1c0aiikj7c9ultn3ks1pa150g7s.png-6.5kB

image_1c0aiipvm1n2ddce4svfbrm5e89.png-9.5kB
這樣賦值是會報錯的,第一個賦值是y=1(使用的是關鍵詞參數賦值),第二個我們使用的是位置參數賦值,但是第二個參數根據位置應該對應的是y,課時y在前面已經被占用了,所以會報錯。

image_1c0aijpat1kjk1bis14ur1o3v17tc8m.png-6.8kB

image_1c0aik4no1mtj1ioj1c4rv3ov1693.png-9.5kB
可以看到關鍵參數在位置后面寫就沒有報錯;

5.

image_1c0aikt5u1v8mjuv14bj1r3pke9g.png-5.3kB
在創建函數時,可以給參數賦值默認的值
image_1c0ail5b21hn61m2l1btc1frb1u5s9t.png-0.5kB
在給參數賦值時,如果不從新賦值,那么參數就會使用創建函數時給賦予的默認值

image_1c0ailni812v9dkk4gm1m3n1m48aa.png-7.9kB
可以通過位置和關鍵詞來修改默認參數值
image_1c0aim29kg52qor1fufq6n2p7an.png-1kB
把參數從新賦值就不會使用默認參數值了,會使用新的賦值來覆蓋默認的參數值

默認參數的用途:比如安裝軟件的默認路徑,或者一些默認勾選的選項; 比如設置某個程序的默認端口等等。

6.參數組

當定義一個函數的參數時,實參不能少于或多于形參,否則執行就會報錯; 有多少個實參,定義函數時就得定義多少個形參,但是如果參數需要一萬個,則不可能去寫一萬個參數。

所以這里我們可以使用參數組;當需要的參數數量過多或者實參所需求的數量不明確時,就可以使用參數組;

image_1c0ain8d9epu1l8m18u05ov15ivb4.png-5.8kB
定義參數組的關鍵符號是‘*’,后面定義一個組名即可
image_1c0ainhqv1opp16b7km5166po3gbh.png-1.3kB

可以看到定義多少個參數都可以,打印時以元組形式打印出來。

‘*’ 用來接收N個位置參數,轉換成元組;不能接收關鍵字參數。。

image_1c0aioei0f991b8p13fv1r9gu0ubu.png-7kB
image_1c0aipn45q7l1517rt2r2toopdr.png-1.4kB
傳參數值的時候,也可以使用,比如([1,2,3,4,5]),只不過打印出來的時候會轉換成元組

image_1c0aiq2ni4cnoioll66gk9ne8.png-8.1kB
image_1c0aiq96j1chb12a6k8o13gj16n7el.png-2.1kB
使用兩個*,表示可以傳入字典參數; 把N個關鍵字參數,轉換成字典的方式。
’用來接收N個關鍵字參數,轉換成字典。

test(**{'name':'zhangsan','age':20})

image_1c0aire835bj1nv71asm1v0c2maf2.png-2.1kB
傳入參數也可以使用兩個**,只不過字典的寫法稍有差別

image_1c0airveuen71m991n1vnpu79sff.png-11.4kB
image_1c0ais514npm1pni1i4q1l121s1pfs.png-3kB
打印字典key對應的value

def test3(name,**kwargs):print (name)print (kwargs)test3(123)

image_1c0aisrlg1rd4lnorvh5rr1lt6g9.png-0.8kB
位置參數和參數組一起使用;
這里沒有定義參數組的值,所以打印出來為空的字典

def test3(name,**kwargs):
print (name)
print (kwargs)test3('lisi',age=20,sex='M')

image_1c0aitmaprhv1c8acoe1t5o1is8gm.png-2.3kB
位置參數和參數組的值,被分開打印了

def test4 (name,age=18,**kwargs):            #在寫普通參數和參數組時,要把參數組寫在后面print (name)print (age)print (kwargs)test4('lisi',sex='M',hobby='car')

image_1c0aiu6plh6d77l10hjciemu4h3.png-3.1kB
使用兩個位置參數和一個參數組;第二個位置參數被打印的是默認值

test4('lisi',sex='M',hobby='car',age=20)

image_1c0aiutch1mnn1skatfnv6r1rnrhg.png-3.1kB
age位置參數不使用默認值,根據關鍵字參數的方式對其修改

test4('lisi',22,sex='M',hobby='car')

image_1c0aivenv154v15db106aj7ldhht.png-3kB
age根據位置參數的方式對其修改


image_1c0aj03jn1taim9c1736c2s6kfia.png-16kB

image_1c0aj0aqn7bq3d713uu1295crqin.png-4.3kB
*args 接收N個位置參數;**kwargs接收N個關鍵字參數; 在賦值個參數時,后面并沒有符合位置參數的值,所以打印位置參數會顯示一個空的元組。

test5 ('lisi',33,44,55,66,sex='M',hobby='car')

image_1c0aj0ti81fa74vl1hao9trql5j4.png-4.7kB
這樣4種參數就都可以體現出來了

image_1c0aj19ou13c01ti31414kd6187rjh.png-24.3kB
函數嵌套函數;
image_1c0aj23d6ni21ek91v9p1nhssf0ke.png-5.5kB

image_1c0aj30ra1oenk3h1d5g1me01253lo.png-25.2kB

image_1c0aj2s191mh88qgi351gos1m30lb.png-28.6kB
可以看到此處的代碼與上面的一樣,只是logger這個函數在調用函數的下面,執行時就會報錯,所以在調用函數時,一定要在相關函數的下面去掉用,否則是找不到相關內容的。

轉載于:https://blog.51cto.com/daimalaobing/2046665

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392083.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習sql注入:猜測數據庫_面向數據科學家SQL:學習簡單方法

學習sql注入:猜測數據庫We don’t pick a hammer and look for nails — that would be an unusual way of solving problems. The usual way of doing business is to identify the problem first, then look for appropriate tools.我們不用錘子找釘子,那是解決問…

android 百度地圖3.0,android 百度地圖3.0

一:為地圖設置事件注意新版本中要有一個getMapmMapView.getMap().setOnMapStatusChangeListener(listener);OnMapStatusChangeListener listener newOnMapStatusChangeListener() {/*** 手勢操作地圖,設置地圖狀態等操作導致地圖狀態開始改變。* param s…

(摘錄)sockaddr與sockaddr_in,sockaddr_un結構體詳細講解

struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。 sa_data是14字節協議…

數據挖掘—K-中心點聚類算法(Java實現)

K-中心點聚類算法 (1)任意選擇k個對象作為初始的簇中心點 (2)指派每個剩余對象給離他最近的中心點所表示的簇 (3)選擇一個未被選擇的中心點直到所有的中心點都被選擇過 (4)選擇一個…

使用akka構建高并發程序_如何使用Akka Cluster創建簡單的應用程序

使用akka構建高并發程序If you read my previous story about Scalachain, you probably noticed that it is far from being a distributed system. It lacks all the features to properly work with other nodes. Add to it that a blockchain composed by a single node is…

pandas之數值計算與統計

數值計算與統計 對于DataFrame來說,求和、最大、最小、平均等統計方法,默認是按列進行統計,即axis 0,如果添加參數axis 1則會按照行進行統計。 如果存在空值,在統計時默認會忽略空值,如果添加參數skipna …

python自動化數據報告_如何:使用Python將實時數據自動化到您的網站

python自動化數據報告This tutorial will be helpful for people who have a website that hosts live data on a cloud service but are unsure how to completely automate the updating of the live data so the website becomes hassle free. For example: I host a websit…

一顆站在技術邊緣的土豆

2012年開始上專業課,2013年打了一年游戲,年底專業課忘光了,但是蒙混過關沒掛科,2014年7月份畢業,對這個社會充滿向往。2014年9月份——方正代理商做網絡安全公司。2015年3月份跳槽到一家vmware代理商公司。2016年6月&a…

leetcode 839. 相似字符串組(并查集)

如果交換字符串 X 中的兩個不同位置的字母,使得它和字符串 Y 相等,那么稱 X 和 Y 兩個字符串相似。如果這兩個字符串本身是相等的,那它們也是相似的。 例如,“tars” 和 “rats” 是相似的 (交換 0 與 2 的位置); “r…

android intent參數是上次的結果,【Android】7.0 Intent向下一個活動傳遞數據、返回數據給上一個活動...

1.0 可以利用Intent吧數據傳遞給上一個活動,新建一個叫“hellotest01”的項目。新建活動FirstActivity,勾選“Generate Layout File”和“Launcher Activity”。image修改AndroidMainifest.xml中的內容:android:name".FirstActivity&quo…

實習一年算工作一年嗎?_經過一年的努力,我如何找到軟件工程工作

實習一年算工作一年嗎?by Andrew Ngo通過安德魯恩戈 經過一年的努力,我如何找到軟件工程工作 (How I landed a software engineering job after a year of hard work) Many of us think the path to becoming a software engineer requires years of education an…

學習深度學習需要哪些知識_您想了解的有關深度學習的所有知識

學習深度學習需要哪些知識有關深層學習的FAU講義 (FAU LECTURE NOTES ON DEEP LEARNING) Corona was a huge challenge for many of us and affected our lives in a variety of ways. I have been teaching a class on Deep Learning at Friedrich-Alexander-University Erlan…

參加開發競賽遇到的問題【總結】

等比賽完就寫。 轉載于:https://www.cnblogs.com/jiangyuanjia/p/11261978.html

html5--3.16 button元素

html5--3.16 button元素 學習要點 掌握button元素的使用button元素 用來建立一個按鈕從功能上來說,與input元素建立的按鈕相同button元素是雙標簽,其內部可以配置圖片與文字,進行更復雜的樣式設計不僅可以在表單中使用,還可以在其…

如何注冊鴻蒙id,鴻蒙系統真機調試證書 和 設備ID獲取

鴻蒙系統真機調試創建項目創建項目創建應用創建鴻蒙應用(注意,測試階段需要發郵件申請即可)關聯應用項目進入關聯 添加引用準備調試使用的 p12 和證書請求 csr使用以下命令// 別名"test"可以修改,但必須前后一致,密碼請自行修改key…

Java—實現 IOC 功能的簡單 Spring 框架

編寫一個實現 IOC 功能的簡單 Spring 框架,包含對象注冊、對象管理、及暴 露給外部獲取對象的功能,并編寫測試程序。擴展注冊器的方式,要求采用 XML 和 txt 文件。 源代碼 package myspring;import java.lang.reflect.Method; import java.…

讀zepto核心源碼學習JS筆記(3)--zepto.init()

上篇已經講解了zepto.init()的幾種情況,這篇就繼續記錄這幾種情況下的具體分析. 1. 首先是第一種情況,selector為空 既然是反向分析,那我們先看看這句話的代碼; if (!selector) return zepto.Z() 這里的返回值為zepto.Z();那我們繼續往上找zepto.Z()函數 zepto.Z function(dom…

css flexbox模型_Flexbox和CSS Grid之間的主要區別

css flexbox模型by Shaira Williams由莎拉威廉姆斯(Shaira Williams) Flexbox和CSS Grid之間的主要區別 (The main differences between Flexbox and CSS Grid) Dimensions define the primary demarcation between Flexbox and CSS Grid. Flexbox was designed specifically …

置信區間估計 預測區間估計_估計,預測和預測

置信區間估計 預測區間估計Estimation implies finding the optimal parameter using historical data whereas prediction uses the data to compute the random value of the unseen data.估計意味著使用歷史數據找到最佳參數,而預測則使用該數據來計算未見數據的…

鴻蒙系統還會推出嗎,華為明年所有自研設備都升級鴻蒙系統,還會推出基于鴻蒙系統的新機...

不負期許,華為鴻蒙OS手機版如期而至。今日(12月15日),鴻蒙OS 2.0手機開發者Beta版本正式上線,支持運行安卓應用,P40、Mate 30系列可申請公測。國內媒體報道稱,華為消費者業務軟件部副總裁楊海松表示,按照目…