日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 函数递归一次增加一次变量_python基础之函数、返回值,局部变量、全局变量,递归(继续补充不定长参数)...

發布時間:2024/9/3 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 函数递归一次增加一次变量_python基础之函数、返回值,局部变量、全局变量,递归(继续补充不定长参数)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.python中函數定義:函數是邏輯結構化和過程化的一種編程方法。(完成某一種特定的功能)

def test02():

#""

msg = 'hello WuDaLang'

return msg

test02()

t1 = test02()

print(t1)

def:在python中定義函數的關鍵字。

test02:函數名

():內可定義形參(可以傳參也可以不傳參)

"":文檔描述(非必要,但是強烈建議為你的函數添加描述信息)

泛指代碼塊或程序處理邏輯

return:定義返回值

return語句用于表示函數執行到此結束,并且返回return后面的對象;

有時候,函數不需要返回任何值,此時可以不需要return語句,它在后臺默認給你返回個None,并且不給任何提示;

但是更多的時候我們還是需要return一些東西。一旦函數執行過程遇到return語句,那么之后函數體內的所有代碼都會被忽略,直接跳出函數體;

那怕你現在正在一個循環內。

return可以返回些什么?

return可以返回什么?

什么都不返回,僅僅return:return數字/字符串/任意數據類型: return 'hello'一個表達式:return 1+2一個判斷語句:return 100 > 99一個變量:returna

一個函數調用:returnfunc()

甚至是返回自己!:returnself

多個返回值,以逗號分隔:return a, 1+2, "hello"簡而言之,函數可以return幾乎任意Python對象。

View Code

怎么接受函數的返回值?

在調用函數的時候,可以將函數的返回值保存在變量中;所以如果有多個函數返回值的時候需要用多個變量接收,變量之間用逗號連接。

調用運行:可以帶參數也可以不帶

函數名()

函數的優點:減少代碼的重復率,利于修改,可擴展。2.函數和過程

過程:就是沒有返回值的函數

def test01():

pass

def test02():

return 1

def test03():

return 1,2,3,"df",[12,"sd"],{"name":"小明"}

t1 = test01()

t2 = test02()

t3 = test03()

print(t1)

print(t2)

print(t3)

#None

#1

#(1, 2, 3, 'df', [12, 'sd'], {'name': '小明'})

總結:返回值=0,返回None;

返回值=1,返回該object;

返回值>1,返回元祖。

3.參數的傳遞

Python的函數參數傳遞的是實際對象的內存地址。

Python的數據類型分可變數據類型和不可變數據類型。

形參和實參

(1)形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數后則不能再使用該形參變量;

(2)實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。

def test01():

a=1

b=2

return a+b

def test02(x,y):

return x+y

t1 = test01()

t2 = test02(3,8)

print(t1)

print(t2)

#3

#11

【注意:要確認函數調用時候實參的順序和函數定義中形參的順序一致】

(2)關鍵字實參——明確指出實參相對應的形參,指出之后順序任意。

defpet(pet_type,name,age):print("我養的寵物是"+pet_type+",他叫"+name+",有"+age+"歲了!")

pet(pet_type="烏克蘭小乳豬",age="30",name="彭昌云")############################

我養的寵物是烏克蘭小乳豬,他叫彭昌云,有30歲了!

View Code

(3)默認值——-———————————————在編寫函數的時候給每個形參指定默認值。

使用默認值時,先要列出沒有默認值的形參,然后再列出有默認值的形參。

def pet(name,age,pet_type="烏克蘭小乳豬"):print("我養的寵物是"+pet_type+",他叫"+name+",有"+age+"歲了!")

pet(age="30",name="彭昌云")#####################

我養的寵物是烏克蘭小乳豬,他叫彭昌云,有30歲了!

View Code

(4)傳遞任意數量的實參和認識數量的關鍵字實參

*x中的*創建的是一個名為x的空元祖,并將所有收到的值都存在這個元祖中;

**x——在需要接受任意數量的實參,但是預先不知道傳遞給函數的是什么樣的值,可將函數編寫成能夠接受任意數量的鍵—值對

def pet(*pet_features):for item inpet_features:print("小豬豬的特征:"+item)

pet("name","age","high","wegth")def build_profile(first,last,**user_info):

profile={}

profile["first_name"]=first

profile["last_name"]=lastfor key,value inuser_info.items():

profile[key]=valuereturnprofile

user_profile=build_profile("彭","昌云",another_name="傻逼",feather="二貨")print(user_profile)#########################

小豬豬的特征:name

小豬豬的特征:age

小豬豬的特征:high

小豬豬的特征:wegth

{'first_name': '彭', 'feather': '二貨', 'last_name': '昌云', 'another_name': '傻逼'}

View Code

4、變量

a=1 #看到賦值語句,首先把注意力放在等號的右側

在python中

變量和數據是分開存放的;

數據保存在內存中的一個位置;

變量中保存著數據在內存中的地址;

變量中記錄著數據的地址,就叫做引用;

使用id()函數可以查看變量中保存數據所在的內存地址;

如果變量已經被定義,當給一個變量賦值的時候,本質上是修改了數據的引用;

變量不在對之前的數據引用,變量改為對新賦值的數據引用。

局部變量和全局變量

(1)在子程序中定義的變量稱為局部變量,局部變量作用域是定義該變量的子程序。

(2)在程序的一開始定義的變量稱為全局變量,全局變量作用域是整個程序,頂頭寫。

(3)當全局變量與局部變量同名時:

在定義局部變量的子程序內,局部變量起作用;在其它地方全局變量起作用。

(4)首先在自己的作用域找,找不到的話往外面找,直到找到為止,找不到的話就編紅。

######## 全局變量變量名大寫

######## 局部變量變量名小寫

# 如果函數中無global關鍵字,優先讀取局部變量,能讀取全局變量,無法對全局變量重新賦值,

但是對于可變類型(列表,字典),可以對內部元素進行操作(增刪改)

# 如果函數中有global關鍵字,變量本質上就是全局的那個變量,可讀取可賦值

(5)nonlocal,指定上一級變量,如果沒有就繼續往上直到找到為止

name = "阿薩德"

def weihou():

name = "共和國"

print(name)

def weiweihou():

nonlocal name # nonlocal,指定上一級變量,如果沒有就繼續往上直到找到為止

name = "云集" # 該處則是對上一級name = "共和國"重新賦值為name = "云集"

print(name)

weiweihou()

print(name) # 所以在該處name為"云集"

print(name)

weihou()

print(name)

#阿薩德

共和國

云集

云集

阿薩德

5.總結

(1)變量查找順序: LEGB,作用域局部>外層作用域>當前模塊中的全局>python內置作用域;

(2)只有模塊、類、及函數才能引入新作用域;

(3)對于一一個變量,內部作用域先聲明就會覆蓋外部變量,不聲明直接使用,就會使用外部作用域的變量;

(4)內部作用域要修改外部作用域變量的值時,全局變量要使用global關鍵字,嵌套作用域變量要使用nonlocal關鍵字。nonlocal是python3新增的關鍵字,

有了這個關鍵字,就能完美的實現閉包了。

使用nonlocal關鍵字!它可以修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量。

a=1

print('————a1————',id(a))defouter():

a=2

print('————a2————',id(a))definner():

a=3

print('————a3————',id(a))

inner()print("————a2————", id(a))

outer()print("————a1————", id(a))

————a1————1503749216————a2————1503749232————a3————1503749248————a2————1503749232————a1————1503749216

View Code

a = 10

deftest():

a+= 1

print(a)

test()

Traceback (most recent call last):

File"E:/NewPython/demo1_base.py", line 227, in test()

File"E:/NewPython/demo1_base.py", line 225, intest

a+= 1UnboundLocalError: local variable'a'referenced before assignment

為什么呢?

a+= 1相當于a = a + 1,按照賦值運算符的規則是先計算右邊的a+1。但是,Python的規則是,如果在函數內部要修改一個變量,那么這個變量需要是內部變量,除非你用global聲明了它是外部變量。很明顯,我們沒有在函數內部定義變量a,所以會彈出局部變量在未定義之前就引用的錯誤。

View Code

a=1

print('————a1————',id(a))defouter():

a=2

print('————a2————',id(a))definner():globala

a=3

print('————a3————',id(a))print('把最外面的全局變量的a改變了')

inner()print("————a2————", id(a))

outer()print("————a1是最外面的變量————", id(a))

————a1————1503749216————a2————1503749232————a3————1503749248把最外面的全局變量的a改變了

————a2————1503749232————a1是最外面的變量————1503749248

View Code

a=1

print('————a1————',id(a))defouter():

a=2

print('————a2————',id(a))definner():

nonlocal a

a=3

print('————a3————',id(a))

inner()print("————a2————", id(a))

outer()print("————a1是最外面的變量————", id(a))

————a1————1503749216————a2————1503749232————a3————1503749248————a2————1503749248————a1是最外面的變量————1503749216

View Code

6.遞歸調用

在python中,在函數內部,可以調用其他函數。如果在調用一個函數的過程中直接或間接調用自身本身,那其為遞歸調用。

注意:必須要有一個結束條件,不然就是死循環。

遞歸效率不高。

7.返回值————————————return

返回一個結果,當調用函數的時候就會返回return后面表達式的結果,那么就可以對這個返回結果進行任意的操作;

函數可返回任何類型的值,包括列表和字典等較復雜的數據結構;

return在函數里面相當于一個結束符號,代表函數到此為止;

小豬豬的特征:name

小豬豬的特征:age

小豬豬的特征:high

小豬豬的特征:wegth

{'first_name': '彭', 'feather': '二貨', 'last_name': '昌云', 'another_name': '傻逼'}################

{'last': '彭', 'age': '100', 'first': '小豬豬'}

{'last': '小哥哥', 'first': '烏克蘭小乳豬x'}

View Code

總結

以上是生活随笔為你收集整理的python 函数递归一次增加一次变量_python基础之函数、返回值,局部变量、全局变量,递归(继续补充不定长参数)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。