python函数的返回值是返回引用吗_python-函数(上):函数返回值、函数调用、前向引用...
編程方法:
1、面向?qū)ο?#xff1a;類--class
2、面向過程:過程--def
3、函數(shù)式編程:函數(shù)--def
#python中函數(shù)#函數(shù)的定義#打印一個(gè)佛祖鎮(zhèn)樓 -> 一個(gè)功能點(diǎn)的解釋
defprint_info():print("_ooOoo_")print("o8888888o")print("88 . 88")print("(| -_- |)")print("O\\ = /O")print("____/`---'\\____")print(". ' \\| |// `.")print("/ \\||| : |||// \\")print("/ _||||| -:- |||||- \\")print("| | \\\\\\ - /// | |")print("| \\_| ''\\---/'' | |")print("\\ .-\\__ `-` ___/-. /")print("___`. .' /--.--\\ `. . __")print(".""'< `.___\\__/___.' >'"".")print("| | : `- \\`.;`\\ _ /`;.`/ - ` : | |")print("\\ \\ `-. \\_ __\\ /__ _/ .-` / /")print("======`-.____`-.___\\_____/___.-`____.-'======")print("`=---='")print(" ")print(".............................................")print("佛祖鎮(zhèn)樓 BUG辟易")print("佛曰:")print("寫字樓里寫字間,寫字間里程序員;")print("程序人員寫程序,又拿程序換酒錢。")print("酒醒只在網(wǎng)上坐,酒醉還來網(wǎng)下眠;")print("酒醉酒醒日復(fù)日,網(wǎng)上網(wǎng)下年復(fù)年。")print("但愿老死電腦間,不愿鞠躬老板前;")print("奔馳寶馬貴者趣,公交自行程序員。")print("別人笑我忒瘋癲,我笑自己命太賤;")print("不見滿街漂亮妹,哪個(gè)歸得程序員?")
a= 10
if a == 10:#pass 占位 防止語法錯(cuò)誤
print_info()#函數(shù) -> python
函數(shù)是邏輯結(jié)構(gòu)化和過程化的一種編程方法
python中函數(shù)定義方法:
deftest(x):"The function definitions"x+=1
return x
def:定義函數(shù)的關(guān)鍵字
test :函數(shù)名
():內(nèi)可定義形參
“”:文檔描述(非必要,但是強(qiáng)烈建議為你的函數(shù)添加描述信息)
x+=1:泛指代碼塊或程序處理邏輯
return:定義返回值
#函數(shù)
deffunc1():"testing1"
print("in the func1")return0#過程
deffunc2():"testing2"
print("in the func2")
x= func1() #in the func1
y = func2() #in the func2
print("from func1 return is %s"%x) #from func1 return is 0
print("from func2 return is %s"%y) #from func2 return is None
使用函數(shù)的三大優(yōu)點(diǎn):
1.代碼重用
2.保持一致性
3.可擴(kuò)展性
函數(shù)返回值
返回值數(shù)=0:返回None(沒有return的情況)
返回值數(shù)=1:返回object
返回值數(shù)>1:返回tuple(返回一個(gè)元組)
如:
deftest01():pass
deftest02():return0deftest03():return 0,10,'Hello',['alex','lb'],{'WuDaLang':'lb'}
t1=test01()
t2=test02()
t3=test03()print("from test01 return is [%s]:"%type(t1),t1)print("from test01 return is [%s]:"%type(t2),t2)print("from test01 return is [%s]:"%type(t3),t3)
函數(shù)調(diào)用
調(diào)用方法:通過 函數(shù)名() 即可完成調(diào)用
test()執(zhí)行,()表示調(diào)用函數(shù)test,()內(nèi)可用有參數(shù)也可以沒有
注意:
每次調(diào)用函數(shù)時(shí),函數(shù)都會(huì)從頭開始執(zhí)行,當(dāng)這個(gè)函數(shù)中的代碼執(zhí)行完畢后,意味著調(diào)用結(jié)束了
當(dāng)然了如果函數(shù)中執(zhí)行到了return也會(huì)結(jié)束函數(shù)
參數(shù):
1.形參和實(shí)參
定義時(shí)小括號(hào)中的參數(shù),用來接收參數(shù)用的,稱為 “形參”
調(diào)用時(shí)小括號(hào)中的參數(shù),用來傳遞給函數(shù)用的,稱為 “實(shí)參”
形參:形式參數(shù),不是實(shí)際存在,是虛擬變量。在定義函數(shù)和函數(shù)體的時(shí)候使用形參,目的是在函數(shù)調(diào)用時(shí)接收實(shí)參(實(shí)參個(gè)數(shù),類型應(yīng)與形參一一對(duì)應(yīng))
實(shí)參:實(shí)際參數(shù),調(diào)用函數(shù)時(shí)傳給函數(shù)的參數(shù),可以是常量,變量,表達(dá)式,函數(shù),傳給形參
區(qū)別:形參是虛擬的,不占用內(nèi)存空間,形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,實(shí)參是一個(gè)變量,占用內(nèi)存空間,數(shù)據(jù)傳送單向,實(shí)參傳給形參,不能形參傳給實(shí)參
#定義一個(gè)有參數(shù)的函數(shù)#形參: 形式參數(shù)#格式: def 函數(shù)名(形參1, 形參2, ...):
defmy_func(a, b):
ret= a +bprint(ret)#執(zhí)行一個(gè)有參數(shù)的函數(shù)#實(shí)參: 實(shí)際參數(shù)#格式: 函數(shù)名(實(shí)參1, 實(shí)參2,...)
num1 = 80num2= 9
#在執(zhí)行函數(shù)的時(shí)候 就好比是a = num1 b = num2
my_func(num1, num2)
2.位置參數(shù)和關(guān)鍵字(標(biāo)準(zhǔn)調(diào)用:實(shí)參和形參位置一一對(duì)應(yīng);關(guān)鍵字調(diào)用:位置無需固定)
deftest(x,y):print(x)print(y)
test(1,2) #位置參數(shù)調(diào)用,實(shí)參的位置與形參的位置要一一對(duì)應(yīng)
test(y=2,x=1) #關(guān)鍵字參數(shù),調(diào)用函數(shù)的時(shí)候使用的是函數(shù)的形參名,與形參順序無關(guān)
test(3,y=2) #混合使用時(shí),位置參數(shù)在前,關(guān)鍵字參數(shù)在后,關(guān)鍵字參數(shù)是不能寫在位置參數(shù)前面的
3.默認(rèn)參數(shù)(缺省參數(shù)): 給形參設(shè)置了一個(gè)默認(rèn)值
def test(x,y=2):print(x)print(y)
test(1)
test(1,y=3)
test(1,3)#默認(rèn)參數(shù)特點(diǎn):調(diào)用函數(shù)的時(shí)候,默認(rèn)參數(shù)非必須傳遞
4.參數(shù)組
#*args: 接受N個(gè)位置參數(shù),轉(zhuǎn)換成元組形式
def test(*args): #參數(shù)不固定
print(args)
test(1,3,2,4,5)
test(*[1,2,4,5,5]) #args = tuple([1,2,4,5,5])
def test1(x,*args):print(x)print(args)
test1(1,2,3,4,5,6,7)
#**kwargs:接受N個(gè)關(guān)鍵字參數(shù),轉(zhuǎn)換成字典的方式
def test2(**kwargs):print(kwargs)print(kwargs['name'])print(kwargs['age'])print(kwargs['sex'])
test2(name='alex',age=8,sex='F')
test2(**{'name':'alex','age':8,'sex':'F'})def test3(name,**kwargs):print(name)print(kwargs)
test3('alex') #后面接收一個(gè)空字典
test3('alex',age=18,sex='m')def test4(name,age=18,**kwargs): #參數(shù)組要放后面
print(name)print(age)print(kwargs)
test4('alex',sex='m',hobby='tesla')
test4('alex',5,sex='m',hobby='tesla')
test4('alex',sex='m',hobby='tesla',age=3)def test5(name,age=18,*args,**kwargs): #參數(shù)組要放后面
print(name)print(age)print(args)print(kwargs)
test5('alex',age=34,sex='m',hobby='tesla')
函數(shù)返回值
#python 學(xué)習(xí)了 一個(gè)內(nèi)置函數(shù) len(object)#定一個(gè)字符串
my_str = "hello"
#內(nèi)置函數(shù)如何實(shí)現(xiàn)的
defmy_len(object):
ret=0for i inobject:
ret+= 1
#如果有一個(gè)return 數(shù)值 成為這個(gè)函數(shù)有返回值
returnret
my_l=my_len(my_str)#None 沒有返回值 空值類型
print("自定義的:",my_l) #自定義的: 5
l =len(my_str)print(l) #5
#四種函數(shù)的類型#01- 無參數(shù)無返回值
defmy_print():print("你好")print("python")#執(zhí)行函數(shù)
my_print()#02- 無參數(shù)有返回值
defmy_pi():return 3.1415926
print(my_pi())#03- 有參數(shù)無返回值
defprint_info(name):print("你好%s" %name)
print_info("龜叔")#04- 有參數(shù)有返回值defmy_func(a, b):return a -b
result= my_func(10, 5)print(result)
函數(shù)返回值之多個(gè)return
一個(gè)函數(shù)中可以有多個(gè)return語句,但是只要有一個(gè)return語句被執(zhí)行到,那么這個(gè)函數(shù)就會(huì)結(jié)束了,因此后面的return沒有什么用處
如果程序設(shè)計(jì)為如下,是可以的因?yàn)椴煌膱鼍跋聢?zhí)行不同的return
#包含多個(gè)return
defmy_func(score):if score <0:print("您傳入的分?jǐn)?shù)有誤!!!")return #函數(shù)的執(zhí)行提前結(jié)束
print("測試")#對(duì)分?jǐn)?shù)進(jìn)行判斷
if score >= 90:return "優(yōu)"
elif score >= 80:return "良"
elif score >= 60:return "中"
elif score >=0:return "差"
print("測試") #不會(huì)執(zhí)行 因?yàn)樵谇懊嬉呀?jīng)執(zhí)行了return#提出需求 如果調(diào)用函數(shù)的人 傳入的分?jǐn)?shù)小于0 那么就人為傳入的分?jǐn)?shù)錯(cuò)誤 告知函數(shù)的調(diào)用者
my_func(-10)
函數(shù)返回多個(gè)數(shù)據(jù)
return后面可以是元組,列表、字典等,只要是能夠存儲(chǔ)多個(gè)數(shù)據(jù)的類型,就可以一次性返回多個(gè)數(shù)據(jù)
如果return后面有多個(gè)數(shù)據(jù),那么默認(rèn)是元組
#需求 傳入一個(gè)人名字 和年齡,例如 小明 22#通過調(diào)用函數(shù)后 得到兩個(gè)字符串 姓名:小明 年齡:22#列表
defdeal_name_age(name, age):#處理后 姓名:小明 年齡:22
new_name = "姓名:%s" %name
new_age= "年齡:%d" %agereturn[new_name, new_age]#變量為列表
ret = deal_name_age("小明", 22)print(ret[0])print(ret[1])#字典
defdeal_name_age(name, age):#處理后 姓名:小明 年齡:22
new_name = "姓名:%s" %name
new_age= "年齡:%d" %agereturn {"name":new_name, "age":new_age}
my_dict= deal_name_age("小明", 22)print(my_dict["name"])print(my_dict["age"])#元組
defdeal_name_age(name, age):#處理后 姓名:小明 年齡:22
new_name = "姓名:%s" %name
new_age= "年齡:%d" %age#如果在函數(shù)內(nèi)部 使用return 返回值1 返回值2,... 默認(rèn)就是元組類型 不需要寫小括號(hào)
returnnew_name, new_age
my_tuple= deal_name_age("小明", 22)print(type(my_tuple)) #
print(my_tuple[0]) #姓名:小明
print(my_tuple[1]) #年齡:22
函數(shù)的嵌套調(diào)用
一個(gè)函數(shù)里面又調(diào)用了另外一個(gè)函數(shù),這就是所謂的函數(shù)嵌套調(diào)用
defmy_func1():print("my_func1開始")print("my_func1結(jié)束")defmy_func2():print("my_func2開始")
my_func1()print("my_func2結(jié)束")#執(zhí)行函數(shù)
my_func2()"""# 最終打印結(jié)果
my_func2開始
my_func1開始
my_func1結(jié)束
my_func2結(jié)束"""
如果函數(shù)A中,調(diào)用了另外一個(gè)函數(shù)B,那么先把函數(shù)B中的任務(wù)都執(zhí)行完畢之后才會(huì)回到上次 函數(shù)A執(zhí)行的位置
前向引用
函數(shù)action體嵌套某一函數(shù)logger,該logger的聲明必須早于action的調(diào)用,否則報(bào)錯(cuò)
defaction():print("in the action")
logger()
action()deflogger():print("in the logger")#報(bào)錯(cuò):NameError: name 'logger' is not defined
deflogger():print("in the logger")defaction():print("in the action")
logger()
action()
defaction():print("in the action")
logger()deflogger():print("in the logger")
action()
總結(jié)
以上是生活随笔為你收集整理的python函数的返回值是返回引用吗_python-函数(上):函数返回值、函数调用、前向引用...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python简单爬虫手机号_python
- 下一篇: websocket python爬虫_p