1. 程式人生 > >Python 基礎第十天

Python 基礎第十天

查找 解釋 元組 位置參數 ron 方式 python 不執行 依次

今日主要內容

1.動態參數

2.命名空間或名稱空間

3.函數的嵌套

4.關鍵字global和nonlocal

動態函數

動態參數*args ,**kwargs

(1)*args

接收的是實參對應的所有位置參數(實參中超出形參位置的),並將其放在元組中.

例1.*args正確放置的位置(不帶默認參數)

技術分享圖片

例2:帶默認參數,不影響默認參數的取值

技術分享圖片

總結:

形參對應順序:位置參數,*args,默認參數

(2)**kwargs 動態傳參

將所有關鍵字參數(超過形參設置的關鍵字參數)添加到一個字典裏.

例3:**kwargs正確使用

技術分享圖片

最終的排列順序:

例4:

技術分享圖片

總結:

最終順序:位置參數,*args,默認參數,**kwargs

一般工作的書寫方式:

def funcl(*args,**kwargs):

  pass

funcl

知識點: *的應用

例5:*args,*的作用

將各個可叠代的數據類型轉換成元組形式,以前是元組的,直接套用原式

技術分享圖片

例6:**kwargs 的** 作用

技術分享圖片

總結 *,**

在函數的調用執行時,

*可叠代對象,代表打散(list,tuple,str,dict(鍵))將元素一一添加到args。

**字典,代表打散,將所有鍵值對放到一個kwargs字典裏。

在函數定義時, *args,**kwargs代表的是聚合。

def func(*args,**kwargs): # 聚合
print(args)
print(kwargs)

func(*,**)#打散

=================================================================

2.命名空間,名稱空間

命名空間一共分為三種:

  全局命名空間

  局部命名空間

  內置命名空間

*內置命名空間中存放了python解釋器為我們提供的名字:input,print,str,list,tuple...它們都是我們熟悉的,拿過來就可以用的方法。

三種命名空間之間的加載與取值順序:

加載順序:內置命名空間(程序運行前加載)->全局命名空間(程序運行中:從上到下加載)->局部命名空間(程序運行中:調用時才加載)

取值順序:

  在局部調用:局部命名空間->全局命名空間->內置命名空間

  在全局調用:全局命名空間->內置命名空間

綜上所述,在找尋變量時,從小範圍,一層一層到大範圍去找尋。

如下圖簡單描述:

加載為向下的箭頭,取值為向上的箭頭.

技術分享圖片

作用域

作用域就是作用範圍,按照生效範圍可以分為全局作用域和局部作用域。

全局作用域:包含內置名稱空間、全局名稱空間,在整個文件的任意位置都能被引用、全局有效

局部作用域:局部名稱空間,只能在局部範圍生效

globals和locals方法

例7:比較全局和局部作用域區別

取的值全部放在字典裏面.

全局名稱空間:py3中內置的所有變量

局部名稱空間:根據所在位置,對變量進行展示,如果所在的函數中有變量,則打印函數的變量,如果則空,只查找當前級內.

技術分享圖片

對比

技術分享圖片

函數的嵌套

解決思路:

1.先確認函數什麽執行,沒有看到調用函數,則函數不執行.即函數名()

2.代碼從上到下依次執行.

3.調用函數:函數裏面從上至下依次執行

例8:通過舉例理解上面的內容,就好理解了

技術分享圖片

4 關鍵字:global 和 nonlocal (聲明變量)

global:

  1,在局部空間內,聲明一個全局變量。

  2,在局部作用域想要對全局作用域的全局變量進行修改時,需要用到 global(限於字符串,數字)。

例9:

如果不用global聲明,則外部是找不到內部的變量的.

技術分享圖片

如果聲明,則外部可以使用此變量

技術分享圖片

2,在局部空間內改變一個全局變量

例10:

技術分享圖片

nonlocal #將內部變量,引用到外部,不包括全局

1,不能修改全局變量。

技術分享圖片

2.在局部作用域中,對父級作用域(或者更外層作用域非全局作用域)的變量進行引用和修改,

並且引用的哪層,從那層及以下此變量全部發生改變。(只要在函數內,就可以引用到外層,只要出了函數,到全局下就錯誤)

技術分享圖片

總結:

global和nonlocal用法相同,nonlocal不能反用到全局下,global可以從局部到全局這樣使用.

Python 基礎第十天