1. 程式人生 > >python學習日記(十)

python學習日記(十)

擠出時間來學了兩天,這幾天真的是忙死了,越到年底越能體會到時間的珍貴,唯一開心的是雙十二搶到衣服了

1.有返回值的叫函式,沒有的叫過程
           如果沒有使用return語句指定返回值,Python也不是什麼都不返回的,Ta會返回一個None物件,所以我們說Python所有的函式都有返回值。

2.嚴格來說,python只有函式,沒有過程

3.函式變數的作用域(變數的可見性):全域性變數、區域性變數
           在函式裡面定義的引數都是區域性變數
           全域性變數的作用域是整個程式碼段

4.如果試圖在函式中修改一個全域性變數的值,python會自動建立一個新的區域性變數代替,名字和原先的全域性變數一樣。

5.global關鍵字:將區域性變數變成全域性變數
           在巢狀的函式中,如果希望在內部函式修改外部函式的區域性變數,應該使nonlocal

6.閉包:函數語言程式設計的重要語法形式
           如果在一個內部函式裡,對在外部作用域(但是不是在全域性作用域)的變數進行引用,那麼內部函式就被稱為閉包
           由於閉包的定義由內部函式而來,所以不能在外部函式外面對內部函式進行引用
>>> def funx(x):
    def funy(y):
        return x*y
    return funy

>>> i=funx(8)
>>> i
<function funx.<locals>.funy at 0x000001F95FCD5950>
>>> type(i)
<class 'function'>
>>> i(5)
40
>>> funx(8)(5)
40
此時,funy就是一個閉包,i被定義為了函式

7.這裡在funy()裡修改了全域性變數x,是不能的.
>>> def funx():
    x=5
    def funy():
        x*=x
        return x
    return funy()

>>> funx()
Traceback (most recent call last):
  File "<pyshell#79>", line 1, in <module>
    funx()
  File "<pyshell#78>", line 6, in funx
    return funy()
  File "<pyshell#78>", line 4, in funy
    x*=x
UnboundLocalError: local variable 'x' referenced before assignment

使用nonlocal關鍵字可以在內嵌函式裡修改外圍函式的變數值

>>> def funx():
    x=5
    def funy():
        nonlocal x
        x*=x
        return x
    return funy()

>>> funx()
25


>>> def funx():
    x=5
    def funy():
        nonlocal x
        x*=x
        return x
    print('example:',x)
    return funy()

>>> funx()
example: 5
25
>>>