python新手入門筆記(六) 函式(1)

2021-10-08 05:11:24 字數 4137 閱讀 2215

函式的返回值

全域性變數和區域性變數

發現函式要學的東西太多,決定分章節記錄。

乙個函式應該先做出定義:

def

text()

:print

('***x'

)text(

)

這是乙個最簡單的函式及其定義方式,以def ***(): 開頭。執行函式直接寫出函式名。

函式名中定義的引數稱為形式引數,即形參。

函式名中定義的引數稱為形式引數,即形參。

傳參可用指定位置傳參或關鍵字傳參,也可以將兩者結合。

def

text

(x,y)

: z = x + y

print

(z)text(5,

6)# 11,指定位置傳參

text(

'hello'

,'world'

)# helloworld,指定位置傳參

text(y=

2,x=1)

# 3,關鍵字傳參

text(

1,y=2)

# 3,混合傳參,需要注意的是指定位置傳參必須放在關鍵字傳參前面

指定位置傳參必須按照形參給定位置進行引數設定。

關鍵字傳參不用按照形參給定位置設定引數,但必須根據指定引數名進行引數設定。

同時形參個數有多少,最後傳參時必須設定多少位引數。

指函式在定義形參時給定預設值,如果傳參時不重新設定引數,則會按照預設值進行傳參。

def

text

(x=3

,y=1):

print

(f'x = '

)print

(f'y = '

)text(y =2)

# x = 3 y = 2

這裡有個比較有意思的事情,算是新手容易踩坑的地方,老手就當個笑話吧。

def

text

(x,y=1)

:print

(f'x = '

)print

(f'y = '

)text(2)

# x = 2 y = 1

text(2,

2)# x = 2 y = 2

text(y=2)

# 報錯

text(x=2)

# x = 2 y = 1

x,y =1,

2# 常規賦值

print

(x,y)

# 1 2

當我們在非函式名之類的位置進行賦值的時候,可以用x,y=1,2的形式進行表示,但在設定形參的時候,它是預設逗號做分隔,乙個引數後面必須跟乙個值。這也就導致了傳參的時候會出現乙個坑,使用位置傳參的時候,它是預設x,y順序傳參,但使用關鍵字傳參,我們無法忽略未設定預設值的引數x而去設定已設定預設值的引數y

通指含有****,*****的形參,有兩種其中任何一種都算。其中星號可理解為解壓縮的意思。單星號表示儲存除字典(dict)以外的引數,雙星號可儲存字典型別的引數。在理論上,可無限傳參。

def

show

(a, b,

*args,

**kwargs)

:print

(f'a='

)print

(f'b='

)print

(f'args='

)print

(f'kwargs='

)show(1,

2,3,

4,5,

6,name=

'張三'

,age=18)

# a=1 b=2 args=(3, 4, 5, 6) kwargs=

函式執行之後使用變數接收或者進一步處理,給呼叫者的結果為返回值。

def

add(a,b)

: c = a + b

return c

res = add(1,

4)print

(res)

# 5

這裡和上面的**塊不太一樣,單純的add(a,b)我們是看不到結果的,但函式的確返回了乙個結果給我們,這個結果就是供我們進一步處理的,比如我們將add(1,4)返回的結果賦值給res,然後將其列印出來,列印就是進一步處理。

這裡有乙個地方需要注意,每個函式只能返回乙個返回值。

將乙個函式給另乙個函式呼叫,即為函式的巢狀呼叫。

def

fun1()

:print

('111'

)def

fun2()

:print

('222'

) fun1(

)print

('333'

)fun2(

)# 222 111 333

defadd

(a,b,c)

:return a+b+c

defpj

(a,b,c)

: he = add(a,b,c)

return he /

3res = pj(1,

3,5)

print

(res)

defres

(*a)

: sum1 =

0for i in a:

sum1 += i

return sum1

defreg

(*a)

: re = res(

*a)/

len(a)

#星號和a是可以拆開的,乙個是代表壓縮,乙個代表引數

return re

i = reg(1,

2,3,

5,3)

print

(i)

這三個例子都是關於巢狀呼叫的例項,講的都是同一件事情,將另乙個函式借用到自己這邊,進行自己這邊函式功能的處理。

區域性變數:函式內部定義的變數,不同的函式可定義相同變數名,兩者互不影響,僅為臨時處理函式。

全域性變數:指對於當前檔案來說,任何位置都可以使用。定義在函式外部,對全域性生效。

a =

100# 全域性變數

deftext

(b):

b =100# 區域性變數

a =

100def

text()

: a =

200print

(a)text(

)# 200,此處為區域性變數返回的結果

print

(a)# 100,此處為全域性變數返回的結果

a =

100def

text()

:print

(a)text(

)# 100,內部無定義變數,向外尋找,全域性變數訪問函式內部

print

(a)# 100,全域性變數訪問函式外部

a =

100# 整型int為不可變型別

deftext()

:print

(a)#原因在於無定義,找不到變數a,無法對此時身份是全域性變數的a做出改變

a +=

100print

(a)text(

)print

(a)# 報錯unboundlocalerror: local variable 'a' referenced before assignment

a =

100def

text()

:global a # global語句被用來宣告x是全域性的

print

(a) a +=

100print

(a)text(

)print

(a)

上面三點可以用一句輔助說明:python在當前位置讀取到某個變數時,會向外尋找該變數的定義。一直找到全域性,找不到就報錯。

python新手入門 函式

2019 5 25 魚c教程19 20課 全域性變數與區域性變數 def discounts price,rate final price price rate return final price old price float input 請輸入原價 rate float input 請輸入折扣...

Python新手入門之函式

函式的定義 函式就是執行特定的任務和特定功能的一段 函式的作用 復用 隱藏實現細節 提高可維護性 提高可讀性便於除錯 函式的建立 def 函式名 輸入引數 函式體 return 函式的引數傳遞 def sun a,b print a a print b b return a b print sun ...

python新手入門

1.先看下python的基礎,然後去看 ng的機器學習課程,最後結合周志華的機器學習和 機器學習實戰兩本書 2.盡量不要直接呼叫工具箱,自己去實現演算法 3.先安andconda,再安ide就可以了,pycharm 4.4,測試anaconda,桌面 開始 右下角執行 ipython第乙個 執行 5...