刚开始的函数
如果現在len方法不能用了,我們可以用for循環語句來實現計算長度的功能
l = [1,2,3,4,5,6] count = 0 for i in l:count += 1 print(count)如果變量的內容變化,就要重新寫一遍,而且不能直觀的看出他的功能,因此這種做法的可讀性差,重復的代碼多,因此要用一種方法把代碼裝起來,也就是定義一個函數,比如
def my_len():l = [1,2,3,4,5,6]count = 0for i in l:count +=1print(count) my_len()定義函數的時候,要盡量以功能為導向,結果最好不要直接在函數中打印
def my_len(): #函數名的定義l = [1,2,3,4,5,6]count = 0for i in l:count += 1return count #函數的返回值 ret = my_len() #函數的調用,以及返回值的接收 print(ret) my_len() def 函數名():for i in range(10):if i%3 == 0:print(i)return {'a':'b'},2print(i)ret,ret2 = 函數名() print(ret) print(ret2)結果為 0
{'a': 'b'}
2
關于返回值
如果沒有返回值,不寫return返回的是None,只有一個return返回的也是None,return的作用有兩個:
1,返回一個值:直接在return后面加上要返回的內容,中間有空格,可以是任何數據類型
2,終止一個函數的繼續
如果返回一個值,可以返回任何數據類型,返回什么,接收什么
如果返回多個值,用一個變量接收返回值,接收到的是一個元組;返回值如果有多個變量接收,那么返回值得個數和接收變量的個數完全一致
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)###python中用逗號隔開的多個值被認為是一個元組
定義def 關鍵詞開頭,空格之后接函數名稱和圓括號(),最后還有一個":"。
函數名:函數名只能包含字符串、下劃線和數字且不能以數字開頭。要盡量簡短,并能表達函數功能
? 調用時函數名()?要記得加上括號。
二,函數的參數
?
def my_len(lst): #參數:接收參數,形式參數,形參count = 0for i in lst:count += 1return countl = [1, 2, 3, 4] # 參數:傳參數/傳參,實際參數,實參l = [1,2,3,4] len_count = my_len(l) print(len_count) len_count2 = my_len('XXX is somebody') print(len_count2)?
練習
1寫一個函數,接收參數一個列表或者字符串,2如果這個列表或者字符串的長度大于2,返回True,否則返回False
def func(s_l):if len(s_l) > 2:return Trueelse:return Falseprint(func([1,2,3,4])) #True print(func('12')) #False?
?
?
?
參數形參和實參:
實際的要交給函數的內容,簡稱實參
定義函數的時候只是一個形式,表示這里有一個參數,簡稱形參。
傳參數可以傳任意的數據類型,并且傳什么,接受什么
傳遞多個參數,用逗號隔開
def f2(arg1,arg2,arg3): #站在接受、形參的角度上:位置參數print(arg1)print(arg2,arg3) f2(arg3 = 1,arg2 = 2,arg1 = 3)
站在傳參數的角度上看問題:一共有兩種傳參的方式
第一種:按照位置傳參數
第二種:按照關鍵字傳參數
def f(para): #para形式參數print(para)f(para = 1) 按照關鍵字傳參數和按照位置傳參數是可以混用的
但是,首先傳按位置的,再傳按關鍵字的
按照位置傳完該接受的參數只能接受一個值,不接受或者重復接收都不行 位置參數:
站在實參角度
按照位置傳值: def mymax(x,y):#此時x=10,y=20the_max = x if x > y else yreturn the_maxma = mymax(10,20) print(ma)
結果:20
按照關鍵字傳值:
結果:20
?
位置,關鍵字混著用:
def mymax(x,y):#此時x = 10,y = 20print(x,y)the_max = x if x > y else yreturn the_maxma = mymax(10,y = 20) print(ma)站在形參角度:
位置參數必須傳值:
def mymax(x,y):#此時x = 10,y = 20print(x,y)the_max = x if x > y else yreturn the_max#調用mymax不傳遞參數 ma = mymax() print(ma)#結果 TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'默認參數
1.正常使用
默認參數:將變化比較小的值設置成默認參數
是可以不傳的參數在不傳參數的情況下可以使用默認的值
如果傳了,就會使用傳的值
2.默認參數的定義
def classmate(name,sex='男'):print('姓名:%s,性別%s'%(name,sex))classmate('尤悅') classmate('曹超') classmate('張建超') classmate('曉梅','女')
結果:
姓名:尤悅,性別男
姓名:曹超,性別男
姓名:張建超,性別男
姓名:曉梅,性別女
?
3.參數陷阱:默認參數是一個可變數據類型,但是盡量避免使用可變數據類型
lst = [] def func(l = lst):l.append(1)print(l)func() func() func() func()結果為:
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
?
lst = [] def func(l = lst):l.append(1)print(l)func([]) func([]) func([]) func([])結果為:
[1]
[1]
[1]
[1]
位置參數
默認參數
*****動態參數******
def func(a,b,c,*args,key = "key"): #在參數前面加個*,這個參數就變成動態參數了print(a,b,c)print(key)print(args) #使用的時候,所有接收過來的參數都被組織成一個元組的形式 func(2,4,4,5,"asff",[1,3],key = "alex")
結果:
2 4 4
alex
(5, 'asff', [1, 3])
用函數實現傳入多個數字相加
def my_sum(*args):sum = 0for i in args:sum += ireturn sum ret = my_sum(1,24,5,7) #37 print(ret) ret2 = my_sum(24,5,7) #36 print(ret2) def stu_info(**kwargs): #**kwargs按關鍵字的動態參數print(kwargs)print(kwargs['name'],kwargs['sex'])stu_info(name = 'alex',sex = 'male')結果
{'name': 'alex', 'sex': 'male'}
alex male
結果為
(1, 2, 3, 5)
{'key': '5'}
結果
(1, 24, 5, 7)
37
結果:
{'b': 2, 'a': 1}
{'a': 1, 'b': 2}
結果:
(1, 2, 3, 4, 5)
{}
動態參數總結:
*args :接收所有按照位置傳的參數,接收到的是參數組成的元祖
**kwargs :接收所有按照關鍵字傳的參數,接收到的是參數組成的字典
所有的參數的順序:位置參數,*args,默認參數,**kwargs
魔性的用法:
在調用函數的時候,可以打散:*l(按順序打散)、**dic(打散)
定義函數的規則:
1.定義:def 關鍵詞開頭,空格之后接函數名稱和圓括號()。 2.參數:圓括號用來接收參數。若傳入多個參數,參數之間用逗號分割。參數可以定義多個,也可以不定義。
參數有很多種,如果涉及到多種參數的定義,應始終遵循位置參數、*args、默認參數、**kwargs順序定義。
如上述定義過程中某參數類型缺省,其他參數依舊遵循上述排序 3.注釋:函數的第一行語句應該添加注釋。 4.函數體:函數內容以冒號起始,并且縮進。 5.返回值:return [表達式] 結束函數。不帶表達式的return相當于返回 Nonedef 函數名(參數1,參數2,*args,默認參數,**kwargs):"""注釋:函數功能和參數說明"""函數體……return 返回值
調用函數的規則:
1.函數名()函數名后面+圓括號就是函數的調用。 2.參數:圓括號用來接收參數。若傳入多個參數:應按先位置傳值,再按關鍵字傳值具體的傳入順序應按照函數定義的參數情況而定 3.返回值如果函數有返回值,還應該定義“變量”接收返回值如果返回值有多個,也可以用多個變量來接收,變量數應和返回值數目一致無返回值的情況: 函數名()有返回值的情況: 變量 = 函數名()多個變量接收多返回值: 變量1,變量2,... = 函數名() 參數總結:
?
?轉載于:https://www.cnblogs.com/xyhh/p/10833455.html
總結
- 上一篇: Unity shader之金属质感衣服
- 下一篇: maven打包不打lib目录里面的jar