1. 程式人生 > >0510Python基礎-動態參數-名稱空間

0510Python基礎-動態參數-名稱空間

形參 找到 取值 結束 CA local gin 回顧 turn

1、昨日內容回顧

函數:避免重復代碼,增強可讀性。

特點:以功能為導向。

def 函數名():

函數體

函數的返回值:return

1,函數中遇到return結束函數。

2,return將函數內部的值返回給函數的執行者。

return None

return None None

return 單個值

return 多個值 返回的是元組。

函數的參數。

實參:

位置參數。按順序一一對應。

關鍵字參數。可以不按照順序但是也必須一一對應。

混合傳參:關鍵字參數永遠在位置參數後面。

形參:

位置參數:按順序一一對應。

默認參數:默認參數在位置參數的後面。

動態參數。

2、動態參數 *args,**kwargs

用戶傳入到函數中的實參數量不定時,或者是為了以後拓展,此時要用到動態參數*args,**kwargs(萬能參數。)

*args接收的是所有的位置參數;**kwargs接收的是所有的關鍵字參數。

位置參數,*args,默認參數, **kwargs

def func1(*args, **kwargs):

print(args)

print(kwargs)

# func1(1, 2, 3, 4)

# func1(x=4, y=5, z=6)

func1(1, 2, 3, x=4, y=5, z=6)

def func3(a):

pass

func3(11)

位置參數,默認參數

def func2(a, b, sex=‘男‘):

print(a)

print(b)

print(sex)

func2(1, 2, ‘女‘)

# 位置參數,*args,默認參數

def func2(a, b, *args, sex=‘男‘):

print(a)

print(b)

print(args)

print(sex)

func2(1, 2, 5,6,7,8,9,sex=‘女‘)

位置參數,*args,默認參數, **kwargs

def func2(a, b, *args, sex=‘男‘,age=20, **kwargs):

print(a)

print(b)

print(args)

print(sex)

print(age)

print(kwargs)

func2(1, 2, 5, 6, 7, 8, 9, x=6, y=5, name=‘alex‘)

def sum1(*args):

ret = 0

for i in args:

ret += i

return ret

print(sum1(1, 2, 3,))

def func3(*args,**kwargs): # 函數的定義 *用意是聚合。

print(args) # (1,2,3,11,21,32)

print(kwargs)

# *的魔性用法

l1 = [1, 2, 3]

l2 = [11, 21, 32]

s1 = ‘fjskalgf‘

s2 = ‘fjskrrrf‘

tu1 = (1, 2, 3)

tu2 = (11, 22, 33)

func3(*l1, *tu1, *tu2)

func3(1,2,3,1,2,3,11,22,33)

dic ={‘name‘: ‘alex‘}

dic1 ={‘age‘: 1000}

func3(*l1, **dic, **dic1) # func3(name=‘alex‘,age=1000)

在函數的執行時,*的用意是打撒。

def func3(*args,**kwargs):

l = []

for i in args: # ([1, 2, 3], [11, 21, 32])

l.extend(i)

args = tuple(l)

print(args)

print(kwargs)

l1 = [1, 2, 3]

l2 = [11, 21, 32]

func3(l1,l2)

3、名稱空間,作用域,作用域鏈,加載順序等。

當程序運行時,代碼從上至下一次讀取,遇到變量與值,

他會在內存中開辟一個空間,存放變量與值的內存地址的對應關系。

這樣存儲變量與值得對應關系的空間叫做名稱空間(命名空間)。

當解釋器遇到函數時,他會將函數名存儲在內存中,但是對於函數體莫不關心。

當函數執行時,他會通過函數名找到函數體,然後將函數體裏面的變量等對應關系存放在一個臨時開辟的空間中,隨著函數的結束,臨時的空間關閉,

這樣的空間叫做臨時名稱空間。

name = ‘alex‘

age = 1000

def func1():

a = 2

b = 3

func1()

內置名稱空間:

len() print() input() list

list

name

print(666)

名稱空間:

內置名稱空間

全局名稱空間

局部名稱空間

加載順序:內置名稱空間 ---> 全局名稱空間(程序運行時) ---->局部名稱空間(函數執行時)

作用域:

全局作用域:內置名稱空間 全局名稱空間

局部作用域:局部名稱空間

取值順序(單項):局部名稱空間(函數執行時) ---> 全局名稱空間 ---> 內置名稱空間

L local

E eclose

G global

B Built-in

sum = 666

name = ‘老男孩‘

def func1():

# sum = 555

print(sum)

func1()

sum = 666

print(sum)

sum = 666 # global

def func1():

sum = 555 # eclose

print(sum)

def inner():

pass

sum = 111 # local

# print(sum)

inner()

func1()

4、函數的嵌套,判斷一下代碼執行結果

print(111)

def func1():

name = ‘alex‘

print(name)

def inner():

a = 2

print(a)

inner()

print(333)

func1()

print(444)

print(111)

def func1():

name = ‘alex‘

print(name)

def inner():

a = 2

print(a)

print(444)

inner()

print(555)

func1()

111 alex 444 2 555

def func1():

a = 666

print(666)

def func2():

name = ‘taibai‘

print(name)

func1()

print(333)

func2()

print(555)

5、global,nonlocal。

global

def func1():

global name

name = ‘alex‘

func1()

print(name)

name = ‘老男孩‘

def func1():

global name

name = ‘alex‘

func1()

print(name)

在全局名稱空間裏得到局部名稱空間的變量

1,return

2,global

1,在局部作用域中聲明一個全局變量。

2,在局部作用域中,更改一個全局變量。

補充:

對於可變的數據類型,函數中如果對其進行操作,改變全局不用引用global.

l1 = [1, 2, 3]

def func1():

l1.append(666)

func1()

print(l1)

nonlocal

1,不能改變一個全局變量。

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

並且引用的哪層,從那層及以下此變量全部發生改變。

name = "老男孩"

def func1():

nonlocal name

print(name)

func1()

name = "老男孩"

def func1():

name = ‘alex‘

print(name) # 1, alex

def inner():

nonlocal name

name = ‘老男孩‘

print(name) # 2 老男孩

inner()

print(name) # 3,alex 老男孩

func1()

0510Python基礎-動態參數-名稱空間