python函数的定义必须在程序的开头_Python之函数基础
1、函數(shù)的定義與調(diào)用
函數(shù)從大方針上考慮總共分為兩種:一種是內(nèi)置函數(shù),另一種是自定義函數(shù)。今天主要講的是自定義函數(shù)。
s = '金老板小護士'#len(s)
def my_len(): #自定義函數(shù)
i= 0
for k ins:
i+= 1print(i)
length=my_len()
print(length)
此函數(shù)是為了計算字符串 's' 的長度。分析此函數(shù)的格式:
首先定義函數(shù)是def,這個是必須的,后面空一格,再寫函數(shù)名稱,定義函數(shù)名稱和定義變量的規(guī)范一樣,后面是冒號。
其實除了def這一行和后面的縮進(jìn),其他的好像就是正常的執(zhí)行代碼。我們來執(zhí)行一下,哦,好像啥也沒發(fā)生。
剛剛我們已經(jīng)說過,這是把代碼裝起來的過程。你現(xiàn)在只會往里裝,還不會往出拿。那么應(yīng)該怎么往出拿呢?我來告訴大家:
mylen()
是不是很簡單?是不是似曾相識?這就是代碼取出來的過程。剛剛我們就寫了一個函數(shù),并且成功調(diào)用了它。
函數(shù)的調(diào)用是用mylen(),直接在函數(shù)代碼后面寫上變量名加上(),就可以調(diào)用函數(shù)了。
總結(jié):
定義:def關(guān)鍵詞開頭,空格之后接函數(shù)名稱和圓括號(),最后還有一個":"。
def 是固定的,不能變。
空格 為了將def關(guān)鍵字和函數(shù)名分開,必須空格。
函數(shù)名:函數(shù)名只能包含字符串、下劃線和數(shù)字且不能以數(shù)字開頭。雖然函數(shù)名可以隨便起,但我們給函數(shù)起名字還是要盡量簡短,并能表達(dá)函數(shù)功能
括號:是必須加的!
注釋:每一個函數(shù)都應(yīng)該對功能和參數(shù)進(jìn)行相應(yīng)的說明,應(yīng)該寫在函數(shù)下面第一行。以增強代碼的可讀性。
調(diào)用:就是?函數(shù)名() 要記得加上括號。
2、函數(shù)的返回值
函數(shù)的返回值,關(guān)鍵字是? return
返回值也就是return的作用是,有兩個作用
一、可以返回函數(shù)值
二、可以結(jié)束一個函數(shù)的繼續(xù)。
要研究返回值,我們還要知道返回值有幾種情況:分別是沒有返回值、返回一個值、返回多個值
返回值的3種情況
沒有返回值 —— 返回None
不寫return
只寫return:結(jié)束一個函數(shù)的繼續(xù)
return None —— 不常用
返回1個值
可以返回任何數(shù)據(jù)類型
只要返回就可以接收到
如果在一個程序中有多個return,那么只執(zhí)行第一個
返回多個值
用多個變量接收:有多少返回值就用多少變量接收
用一個變量接收: 得到的是一個元組
沒有返回值
不寫return的情況下,會默認(rèn)返回一個None
#函數(shù)定義
def mylen():"""計算s1的長度"""s1= "hello world"length= 0
for i ins1:
length= length+1print(length)
#函數(shù)調(diào)用
str_len=mylen()
#因為沒有返回值,此時的str_len為None
print('str_len : %s'%str_len)
不寫return
只寫return,后面不寫其他內(nèi)容,也會返回None,有的同學(xué)會奇怪,既然沒有要返回的值,完全可以不寫return,為什么還要寫個return呢?這里我們要說一下return的其他用法,
就是一旦遇到return,結(jié)束整個函數(shù)。
def ret_demo():
print(111)returnprint(222)
ret=ret_demo()
print(ret)
只寫return
return None:和上面的兩種情況一樣,我們一般不這樣寫。
def ret_demo():
print(111)returnNone
print(222)
ret=ret_demo()
print(ret)return None
返回一個值
只需在return后面寫上要返回的內(nèi)容即可。
#函數(shù)定義
def mylen():"""計算s1的長度"""s1= "hello world"length= 0
for i ins1:
length= length+1
returnlength
#函數(shù)調(diào)用
str_len=mylen()
print('str_len : %s'%str_len)
返回一個值
注意:return和返回值之間要有空格,可以返回任意數(shù)據(jù)類型的值
返回多個值
可以返回任意多個、任意數(shù)據(jù)類型的值
def ret_demo1():'''返回多個值'''
return 1,2,3,4def ret_demo2():'''返回多個任意類型的值'''
return 1,['a','b'],3,4ret1=ret_demo1()
print(ret1)
ret2=ret_demo2()
print(ret2)
返回多個值
返回的多個值會被組織成元組被返回,也可以用多個值來接收
def ret_demo2():return 1,['a','b'],3,4#返回多個值,用一個變量接收
ret2=ret_demo2()
print(ret2)
#返回多個值,用多個變量接收
a,b,c,d=ret_demo2()
print(a,b,c,d)
#用多個值接收返回值:返回幾個值,就用幾個變量接收
a,b,c,d=ret_demo2()
print(a,b,c,d)
多個返回值的接收
上面設(shè)置的函數(shù)只能單一的適用于一種特定的情況,現(xiàn)在如果想要讓我們的函數(shù)能夠適用于所有的變量,就要設(shè)置參數(shù)了。
#函數(shù)定義
def mylen(s1):"""計算s1的長度"""length= 0
for i ins1:
length= length+1
returnlength
#函數(shù)調(diào)用
str_len= mylen("hello world")
print('str_len : %s'%str_len)
帶參數(shù)的函數(shù)
mylen函數(shù)要計算的字符串是誰,這個過程就叫做 傳遞參數(shù),簡稱傳參,我們調(diào)用函數(shù)時傳遞的這個“hello world”和定義函數(shù)時的s1就是參數(shù)。
實際參數(shù)(實參)和形式參數(shù)(形參):
實參:我們調(diào)用函數(shù)時,在變量后面的()里加入的參數(shù)就是實際參數(shù),簡稱實參;
形參:我們定義函數(shù)時,在變量后面的()里加入的參數(shù)就是形式參數(shù),簡稱形參。
傳遞多個參數(shù)
參數(shù)可以傳遞多個,多個參數(shù)之間用逗號分割。
def mymax(x,y):
the_max= x if x > y elseyreturnthe_max
ma= mymax(10,20)
print(ma)
View Code
1 defmymax(x,y):2 the_max = x if x > y elsey3 returnthe_max4
5 ma = mymax(10,20)6 print(ma)
View Code
defmymax(x,y):
the_max= x if x > y elseyreturnthe_max
ma= mymax(10,20)print(ma)
參數(shù)
沒有參數(shù)
定義函數(shù)和調(diào)用函數(shù)時括號里都不寫內(nèi)容
有一個參數(shù)
傳什么就是什么
有多個參數(shù)
位置參數(shù),按照順序?qū)?yīng)
站在實參角度
1.按照位置傳值
defmymax(x,y):#此時x=10,y=20
the_max = x if x > y elseyreturnthe_max
ma= mymax(10,20)print(ma)
按照位置傳參
2.按照關(guān)鍵字傳值
defmymax(x,y):#此時x = 20,y = 10
print(x,y)
the_max= x if x > y elseyreturnthe_max
ma= mymax(y = 10,x = 20)print(ma)
按照關(guān)鍵字傳參
3.位置、關(guān)鍵字形式混著用
defmymax(x,y):#此時x = 10,y = 20
print(x,y)
the_max= x if x > y elseyreturnthe_max
ma= mymax(10,y = 20)print(ma)
位置、關(guān)鍵字混用傳參
正確用法
問題一:位置參數(shù)必須在關(guān)鍵字參數(shù)的前面
問題二:對于一個形參只能賦值一次
總結(jié):
站在實參的角度上:
按照位置傳參
按照關(guān)鍵字傳參
混著用可以:但是 必須先按照位置傳參,再按照關(guān)鍵字傳參數(shù)
不能給同一個變量傳多個值
站在形參角度
位置參數(shù)必須傳值
defmymax(x,y):#此時x = 10,y = 20
print(x,y)
the_max= x if x > y elseyreturnthe_max#調(diào)用mymax不傳遞參數(shù)
ma =mymax()print(ma)#結(jié)果
TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'位置參數(shù)必須傳參
默認(rèn)參數(shù)
1.正常使用
使用方法
為什么要有默認(rèn)參數(shù):將變化比較小的值設(shè)置成默認(rèn)參數(shù)
2.默認(rèn)參數(shù)的定義
def stu_info(name,sex = "male"):"""打印學(xué)生信息函數(shù),由于班中大部分學(xué)生都是男生,
所以設(shè)置默認(rèn)參數(shù)sex的默認(rèn)值為'male'"""
print(name,sex)
stu_info('alex')
stu_info('eva','female')
默認(rèn)參數(shù)
總結(jié):
站在形參的角度上
位置參數(shù):必須傳,且有幾個參數(shù)就傳幾個值
默認(rèn)參數(shù): 可以不傳,如果不傳就是用默認(rèn)的參數(shù),如果傳了就用傳的
動態(tài)參數(shù)
按位置傳值多余的參數(shù)都由args統(tǒng)一接收,保存成一個元組的形式
def mysum(*args):
the_sum=0for i inargs:
the_sum+=ireturnthe_sum
the_sum= mysum(1,2,3,4)print(the_sum)*args求和函數(shù)應(yīng)用
def stu_info(**kwargs):print(kwargs)print(kwargs['name'],kwargs['sex'])
stu_info(name= 'alex',sex = 'male')
動態(tài)參數(shù)有兩種:可以接受任意個參數(shù)
*args : 接收的是按照位置傳參的值,組織成一個元組
**kwargs: 接受的是按照關(guān)鍵字傳參的值,組織成一個字典
args必須在kwargs之前
重要總結(jié):
只有調(diào)用函數(shù)的時候
按照位置傳 : 直接寫參數(shù)的值
按照關(guān)鍵字: 關(guān)鍵字 = 值
定義函數(shù)的時候:
位置參數(shù) : 直接定義參數(shù)
默認(rèn)參數(shù),關(guān)鍵字參數(shù) :參數(shù)名 = '默認(rèn)的值'
動態(tài)參數(shù) : 可以接受任意多個參數(shù)
參數(shù)名之前加*,習(xí)慣參數(shù)名args,
參數(shù)名之前加**,習(xí)慣參數(shù)名kwargs
順序:位置參數(shù), *args,? ?默認(rèn)參數(shù),??? **kwargs
函數(shù)的注釋
def func():
''' 這個函數(shù)實現(xiàn)了什么功能
參數(shù)1:
參數(shù)2:
:return: 是字符串或者列表的長度
'''
pass
總結(jié)
以上是生活随笔為你收集整理的python函数的定义必须在程序的开头_Python之函数基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux怎么退出vim编辑模式_Lin
- 下一篇: python怎么new对象_Python