python學習之函數(三)--函數與過程


1.函數與過程的區別:

有返回值的是函數,沒有返回值的是過程;

函數(function):有返回值

過程(procedure):簡單特殊,沒有返回值

嚴格來說,python只有函數,沒有過程。沒有返回值的函數,默認有一個返回值none

2.返回值:

返回值可以是多種類型,也可以返回多個數據,可以用數組打包返回,也可以用元組一起返回,沒有類型限制

3.函數變量的作用域:

局部變量(local variable):在函數中定義的參數和變量是局部變量,在函數外是無法使用的,因為函數調用完之后,棧就將函數數據清除,所以外部是無法調用的

全局變量(global variable):作用域是整個模塊,整個代碼都可以訪問,可以在函數中使用,最好不要在函數中修改,如果在函數中修改全局變量,會在函數中,新建一個局部變量,名字和全局變量一致,但是不會影線全局變量的值

def decision(price,rate):

final_price = price * rate
old_price = 70
return final_price

old_price = float(input("輸入原價:"))
rate = float(input("輸入折扣:"))
print(old_price)
print("折扣價格:",decision(old_price,rate)

4.global關鍵字:可以用來修改成全局變量

count = 5
def test1():
count = 10
print(count)
print(count

5.內嵌函數:在函數內部定義另一個函數;

def fun1():
print("fun1()正在被調用")
def fun2():
print("fun2()正在被調用")
fun2()
fun1()
fun2()
執行結果:
fun1()正在被調用
fun2()正在被調用
Traceback (most recent call last):
  File "/Users/zoezhang/PycharmProjects/learnpython/learn-內嵌函數.py", line 8, in <module>
    fun2()
NameError: name 'fun2' is not defined

注意:內嵌函數在調用的時候,只能在定義函數的內部能調用,不能全局調用

5.閉包():如果在一個內部函數里,對外部作用域(但不是在全局作用域)里進行引用,則內部函數就被認為是閉包

注意:閉包是由內嵌函數演變而來,全局是不能調用閉包的

#閉包
def funx(x):
def funy(y):
return x*y
return funy
#調用方法一
print(funx(1)(2))
#調用方法二
i=funx(8)
print(i(5))

在python3之前,內部函數是不能直接更改全局變量的,會報錯,需要間接使用容器類型來解決,因為容器類型不是存儲在棧里,所以可以使用,更改方式如下:
#----------------
def fun1():
x=[2]
def fun2():
x[0] *= x[0]
return x[0]
return fun2()
print(fun1())
在python3之后,增加一個關鍵字nonlocal(同類型函數關鍵字glocal)
#----------
def fun1():
x=4
def fun2():
nonlocal x
x*=x
return x
return fun2()
print(fun1())

global適用於函數內部修改全局變量的值; nonlocal適用於嵌套函數中內部函數修改外部變量的值

如果沒有使用以上關鍵字,對全局變量或者外部變量進行修改,python會默認將全局變量隱藏起來

 
        

 



 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM