python 函数递归一次增加一次变量_python3--函数(函数,全局变量和局部变量,递归函数)...
1.1函數
1.1.1什么是函數
函數就是程序實現模塊化的基本單元,一般實現某一功能的集合。
函數名:就相當于是程序代碼集合的名稱
參數:就是函數運算時需要參與運算的值被稱作為參數
函數體:程序的某個功能,進行一系列的邏輯運算
return 返回值:函數的返回值能表示函數的運行結果或運行狀態。
1.1.2函數的作用
函數是組織好的,可重復使用的,用來實現單一,或者相關功能的代碼。
函數能夠提高應用的模塊性,和代碼的重復利用率
我們已近知道python提供了許多內置函數,比如print(),我們自已創建的函數稱為內置函數
1.1.3定義函數的語法
def函數名(參數):
函數體return 返回值內容
1.1.4函數定義規則
函數代碼以def關鍵詞開頭,后接定義函數的名稱和圓括號,冒號():
函數內容以冒號":"開始,并且縮進
函數內容的第一行內容可選擇性使用文檔字符串---用來定義該函數的說明
函數的返回值: return ?[返回值內容] ?用于結束函數,返回一個值,表示程序執行的結果。
函數不帶return 默認返回None ? 返回值可以是任何類型的數據(數字,字符串,函數,列表,元祖,字典等),也可以是一個表達式
函數參數:任何傳入參數和自變量必須放在圓括號中間,圓括號之間用于定義參數。
1.1.5函數調用
定義函數語法
defprintinfo():print("hello world")return
調用函數
printinfo()#函數執行結果
hello world
查看函數返回值
print(printinfo())#結果
hello world
None#默認函數值返回類容
其他返回值示例
defprintinfo():print("hello world")return [111+222]print(printinfo())#結果
hello world
[333] #返回值內容
1.1.5函數參數
注:形參和實參(定義函數時,圓括號(參數)中的所有參數都是形式參數也稱為形參,調用函數中,圓括號(參數)中的參數稱為實際參數,也叫實參)
1)必須參數::
2)關鍵字參數:
3)默認參數:
4)可變參數(*args,**kwargs):
1.必須參數:
從字面理解:必須要傳入參數
傳入的參數:與定義的形參順序一一對應
defstuinfo(name,age):print(name,age)return
#在不傳入參數
stuinfo() #調用函數
#函數執行結果
TypeError: stuinfo() missing 2 required positional arguments: 'name' and 'age'
#報錯,提示類型錯誤,該函數,缺少兩個位置參數
不傳入參數
defstuinfo(name,age):print(name,age)returnstuinfo("zhangsan",18)#函數執行結果
zhangsan 18
傳入參數
2.關鍵字參數
defstuinfo(name,age,hobby):print(name,age,hobby)return
#參數位置匹配,關鍵字參數,與形參的位置順序無關,
stuinfo(age=19,name="lisi",hobby="run")#name= age= hobby=就是關鍵字參數
#函數執行結果
lisi 19 run
關鍵字參數
3.默認參數
默認參數必須指向不變的對象
當函數有多個參數,把變化大的參數反正前面,變化小的參數放在后面。變化小的參數就作為默認參數。
默認參數好處:降低調用函數的難度
#默認參數,可以直接使用用,也可以修改默認參數值
def grade(name,age,city="BeiJing"): #city="BeiJing" 就是默認參數
print(name,age,city)#grade("yangjian",age=18)
grade("lala",age=18,city="shanghai")#grade函數執行結果
lala 18 shanghai
默認參數
4.可變參數
*args ?**args
用途:在定義函數需要,每個定義函數功能的都可以繼續優化,所以我們需要用動態參數
如果把參數寫死了,后期繼續修改完善的功能的,修改該函數功能則會相當麻煩
*args ?結果類型是元祖,傳遞值是任意類型
def test(*args):print(args)
test(123456,[12,45,88],{"name":"qw","age":15}) #可以傳遞任意參數的類型#函數執行結果
(123456, [12, 45, 88], {'name': 'qw', 'age': 15})
**kwargs結果類型是字典,傳遞值是以key=value方式傳入
def test1(**kwargs):print(kwargs)
test1(name="xiha",age="12")#執行結果
{'age': '12', 'name': 'xiha'}
函數* 和 ** 解包
#*
def test(*args):print(args)
test(*[1,2,3,4,5,6,7,8,9]) #*參數解包,把【元素】 循環出來,添加到元祖中#結果
(1, 2, 3, 4, 5, 6, 7, 8, 9)
*
def test1(**kwargs):print(kwargs)
test1(**{"hobby":456,"number":789}) #**參數解包,把key:value 循環出來,添加到字典中#結果
{'number': 789, 'hobby': 456}
**
函數參數組合
def f2(a, b, c=0,*args,**kwargs):print('a =', a, 'b =', b, 'c =', c, args,kwargs)
f2(12,b=12,c=89,aa="as",bb="xxx")#結果
a = 12 b = 12 c = 89 () {'bb': 'xxx', 'aa': 'as'}
函數參數總結:
1.形參的位置順序,必須與實參的順序一一對應,缺一不行,多一不行
2.關鍵字參數,無須一一對應,缺一不行,多一不行
3.位置參數必須在關鍵字參數左邊
4.默認參數一定要用不可變對象,如果是可變對象,程序運行時會有邏輯錯誤
1.2全局變量和局部變量
在子程序中定義的變量稱為局部變量,只在子程序內部生效,
在程序一開始定義的變量稱為全局變量
全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。
當全局變量與局部變量同名時:在定義局部變量的子程序內,局部變量起作用,在其他地方全局變量起作用
name = "xixi" #全局變量
defchange_name():
name= "haha" #局部變量只在函數局部作用域內生效
print("我的名字",name)returnchange_name()print(name)defme():global name #聲明name是全局變量 global
name = "yj" #修改name全局變量的值
print(name)returnme()
如果全局變量是可變的數據類型,函數可以對全局變量內部直接進行修改
eng = ["merry","jack","petter"]defchang():
eng.append("mali")print(eng)returnchang()
總結:
一般寫程序變量的命名規則
###全局變量變量名大寫
###局部變量變量名小寫
函數優先讀取局部變量,能讀全局變量,無法對全局變量重新賦值操作,#全局變量是不可變的類型
全局變量是可變類型,函數可以對全局變量進行操作
函數中有global關鍵字,變量本質就是全局變量,可讀取全局變量,也可操作全局變量
1.3函數之間嵌套
name = "YangJIan" #最外層
def change_name(): #第二層
name = "YangJIan2"
def change_name2(): #第三層
name = "YangJIan3"
print("第3層打印", name)
change_name2()#調用內層函數
print("第2層打印", name)
change_name()#先執行局部函數的打印,
print("最外層打印", name)#第3層打印 YangJIan3#第2層打印 YangJIan2#最外層打印 YangJIan
注:多層函數嵌套,子級函數,只在子級函數內部生效。父級函數能調用子級函數的功能
1.4遞歸函數
1.在函數內部,可以調用其他函數,如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
2.在使用遞歸策越是,必須有一個明確的敵對結束條件,稱為遞歸出口
函數調用的時候,每次調用時要做地址保存,參數傳遞等。
如果函數包含了對其自身函數的調用,該函數就是遞歸。如下
deffoo(n):#實現階乘
if n == 1:return n #當滿種條件n==1才執行return 操作
res = n*foo(n-1) #調用自已本身的函數的結果(再判斷條件是否滿足條件)給res ,
returnresprint(foo(5))#120
遞歸算法所所體現的重復一般有的要求:
1.每次調用在上次規模上都有有所減小:
2.每次遞歸調用都是有明確條件的。
3.相領兩次的重復之間有緊密的聯系,前一次要為后一次做準備(通常前一次的輸出(返回值結果))就作為后一次的輸入;
4.在問題的規模得到滿足條件時,而不再進行遞歸調用。
總結
以上是生活随笔為你收集整理的python 函数递归一次增加一次变量_python3--函数(函数,全局变量和局部变量,递归函数)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python深度神经网络量化_基于Pyt
- 下一篇: 平台允许同时在线人数 显示_糖豆人:终极