python ---------函数
一、為什么要使用函數?
因為如果沒有函數我們平時的代碼就會有很多重復
避免代碼重用
提升代碼的可讀性
二、函數的定義與調用:
1.?def ?函數名(參數1,參數2)
''' 函數注釋'''
print('函數體')
return 返回值
函數就是封裝一個功能
定義:
def 關鍵字開頭,空格之后接函數名和圓括號,最后加一個冒號
def是固定的不能改變
函數名的定義和變量一樣 :數字字母下劃線 任意組合 ,不能是數字開頭? 不能是關鍵字? 要具有可描述性
函數的調用
返回值=函數名(參數1,參數2)#記得函數名后面加括號
下面我們先來定義一個求計算字符串長度的函數。假如我們的len()函數現在不能用了,那么我們就需要定義一個函數,求字符串的長度。如果讓我們一次一次的去寫相同的代碼,會顯得很麻煩。這時候我們的函數就上場了。
def length():s= 'hello world'length = 0for i in s :length +=1print(length) print(length()) #因為沒有返回值你打印最后會顯示一個null def length():s= 'bjbbabjsaofsa'num = 0for i in s:num +=1return num m = length() print(m) # print(length())#return的時候你可以定義一個變量來接收 也可以不接收直接打印 但是如果print就不可以 但是一般最好不要在函數中寫print太lowle View Code函數的返回值:
定義函數一般不要在函數中寫print
return
1、在函數中遇到return就結束函數
2、將值返還給函數的調用者
無return
return None
return一個值該值是什么就返還什么
大家看一下對與函數中只能存在一個return 因為第一個碰到return就把函數結束了
>>> def func(a, b ,c):return areturn b>>> print(func(3, 7, 8)) 3 #只返回第一個return的3 因為碰到第一個return就把函數結束了 其他的return 存在的沒有意義了 >>>?
?
函數的傳遞參數:
兩個方面:
實參角度:
1形式參數和實際參數
def my_len(a): #這個a就是形式參數 用來接收實際參數的return l print(my_len(3)) #實際參數 實實在在存在的 View Code
?
2位置傳參 一? 一對應
def func(a, b ,c):return a, b, c print(func(2, 3,700)) #一一對應并且是當作一個元組打印出來
3、混合傳參----->關鍵字永遠在最后面
def func(a, b=30 ,c): #形式參數和實際參數的一樣都是直接賦值的要放在最后不然會報錯,這個你看b直接賦值了但是放在了中間就報錯return a, b, c, print(func(2, 3,b=700))
?
def func(a, c ,b=40):return a, b, c #這個就是對的 就是全部都放在后面 print(func(2, 3,b=700))
如果你return的好幾個值都在一起return那么最后的返回值顯示出來就在一個元組內
?
3,函數名可以作為函數的參數。
def func():
pass
def func1(a):
a()
func1(func)
4,函數名可以作為函數的返回值。
def func1(a):
return a
func1(func)()
?
?
?
默認傳參:
def Info(username,sex='男'): #定義一個默認參數 sexwith open('one',encoding= 'UTF-8',mode = 'a')as f : #a就是追加內容f.write('{}\t{}\n'.format(username,sex)) while True :username= input('輸入您的姓名:(男生為1開頭)').strip()if '1' in username :username =username[1:]Info(username)else :Info(username,sex='女') View Code?函數的動態參數:
因為我們的靜態參數只能接收固定的? 不能接收哪些不確定的或者多余的變量
動態參數,也叫不定長傳參,就是你需要傳給函數的參數很多,不定個數,那這種情況下,你就用*args,**kwargs接收,args是元祖形式,接收除去鍵值對以外的所有參數,kwargs接收的只是鍵值對的參數,并保存在字典中。
按位置傳值多余的參數都由args統一接收,保存成一個元組的形式? ? ? ?
按照關鍵字傳值接收多個關鍵字參數由kwargs接收 保存成一個字典的形式
?
# def Func(a,*args,b='男'): # print(a) # print(b) # print(*args) # Func(3,2,3,4,b='你')# def n (a,b,c,**kwargs): # print(kwargs) # # n(1,2,3,d=5,f=6) # def func(*args): # print(args) #(1,2,30,1,2,33.。。。。。) # l1 = [1,2,30] # l2= [1,2,33,21,45,66] # func() # def Func(*args): # print(args) # # # li={'name':1,'age':5} # l1 = [1,2,30] # l2= [1,2,33,21,45,66] # Func(*li) # def Nu(a,b,*args,sex='麻痹'): # print(args) # print(sex) # Nu(3,6,'pfapifuafjfbsa',sex='弄哈') # def N(): # print(a,*args,**kwargs) # print(args) # # print(kwargs) # print(kwargs) # # # N(1,'2345',b=12) #*agrs 動態參數 萬能參數#args 動態參數 接收的就是實參對應的 所有位置參數 并將其放在元組中 #位置參數 *args 默認參數 # def func (a,b,c,*args,e='男'): # print(a) # print(b) # print(c) # print(args) # print(e) # func(1,2,3,4,5,6,e='女') #**kwargs # def func(a, b,c, d, *args, e='男',**kwargs): # print(a) # print(b) # print(c) # print(d) # print(args) # print(kwargs) # func(1,2,3,4,5,m=9)# 最終順序:位置參數,*args 默認參數 **kwargs # def func(a,b,c,e='laowang',*args): # print(a) # print(b) # print(c) # print(e) # print(args) # func(1,2,3,4,7,8,89) #如果默認參數放在args之前那么傳值就會把args給傳遞給默認參數一個 把它給覆蓋了 所以一般不這樣做# *的魔法運用 # def func(*args): # print(args) # # # l =[1,2,3] # # l2=[1,2,3,4,5,6] # l=(1,2,3,4) # l2=(2,3,4,5) # func(*l,*l2) #*號可以把兩個列表元組給傳遞進函數內 然后轉化位一個元組中 因為*args接收完 那么用args輸出后就會把所有的元素都放在元組中# def func(*args): # print(args) # # l = [1,23,4,56,78] # l1=[1,2,3,4] # a={'name':'alex','age':12} # func(*a) #如果是字典運用*號然后再把字典讓args接收的話就會把字典中的key值給放在元組中打印出來 # func(*l,*l1) # *星號可以放列表 字符串 元組 字典(字典只是顯示key值),int類型是不可以放進去的 # def func(**kwargs): # print(kwargs) # dic ={'name1':'alex','age1':47} # dic1={'name':'old_man','age':56} # func(**dic,**dic1)#單個的*可以接收不同的列表、元組、字符串內的相同的元素 因為它可以把相同的元素 變成同一個,而**兩個星號不可以接收兩個人不同的字典內的相同的key就是用**組合兩個字典 這兩個字典內不可以出現相同的key#在函數的定義時, *rags、**kwargs# 代表的是聚合 # def func(*args,**kwargs): # print(args) # print(kwargs) # dic1 = {'name1':'alex','age1':46} # dic2 = {'name':'老男孩','age':56} # func(*[1,2,3,4],*'jkbabl',**dic1,**dic2) *和 **可以同時使用的 ## def func(*args,**kwargs): # print(args) # print(kwargs) # # dic1 = {'name1':'alex','age1':46} # dic2 = {'name':'老男孩','age':56} # func(*[1,2,3,4],*'bjbfbabfa',**dic1,**dic2) #字符串如果打散放入args中就會以單獨的字符串類型的形式放入進去 View Code?
*args必須放在默認參數之前放在位置參數之后 ,**kwargs必須放在最后 也就和靜態參數一樣 默認參數都在最后 而**kwargs接收的是賦值的默認參數 所以必須放在最后
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/zhaoyunlong/p/8665112.html
總結
以上是生活随笔為你收集整理的python ---------函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指Kubernetes 揭秘腾讯云的P
- 下一篇: 在命令窗口执行java文件时,提示找不到