一、昨天內容回顧
? 1、函式的引數
? 1)實參角度:位置引數、關鍵字引數、混合引數
? 2)形參角度:位置引數、默認引數、僅限關鍵字引數,萬能引數
? 3)形參角度引數順序:位置引數,*args,默認引數,僅限關鍵字引數,**kwargs
? 2、*的魔性用法:
? 1)函式的定義時:代表聚合
? 2)函式的呼叫時:代表打散
? 3、python中存在的三個空間:
? 內置名稱空間:存盤的內置函式:print, input.....
? 全域名稱空間:py檔案,存放的是py檔案(除去函式,類內部的)的變數,函式名與函式的記憶體地址的關系
? 區域名稱空間:存放的函式內部的變數與值的對應關系
? 4、加載順序:內置名稱空間------->全域名稱空間------>區域名稱空間(執行函式時候)
? 5、調取順序:就近原則, 區域名稱空間------>全域名稱空間----->內置名稱空間
? 1) 區域作用域只能參考全域變數,不能修改,
? 6、作用域:
? 1)全域作用域 :內置名稱空間+全域名稱空間
? 2)區域作用域:區域名稱空間
二、作業:
1、看代碼寫結果
def func():
return 1, 2, 3
val = func()
print(val)
print(type(val) == tuple)
print(type(val) == list)
# 輸出結果:True False
2、看代碼寫結果
def func(*args, **kwargs):
print(args)
print(kwargs)
# a. 請將執行函式,并實作讓args的值為 (1,2,3,4)
func(1, 2, 3, 4)
func(*[1,2,3,4])
# b. 請將執行函式,并實作讓args的值為 ([1,2,3,4],[11,22,33])
func([1,2,3,4],[11,22,33])
# c. 請將執行函式,并實作讓args的值為 ([11,22],33) 且 kwargs的值為{'k1':'v1','k2':'v2'}
func([11,22],33,k1='v1',k2='v2')
# d. 如執行 func(*{'武沛齊','金鑫','女神'}),請問 args和kwargs的值分別是?
func(*{'武沛齊','金鑫','女神'})
# e. 如執行 func({'武沛齊','金鑫','女神'},[11,22,33]),請問 args和kwargs的值分別是?
func({'武沛齊','金鑫','女神'},[11,22,33])
# f. 如執行 func('武沛齊','金鑫','女神',[11,22,33],**{'k1':'堆疊'}),請問 args和kwargs的值分別是?
func('武沛齊','金鑫','女神',[11,22,33],**{'k1':'堆疊'})
3、看代碼寫結果
def func(name,age=19,email='123.qq.com'):
print(name,age,email)
#a執行func('mrxiong'),判斷是否可執行,請可以訪問name、age、email的值分別是什么?
func('mrxiong')
#b執行func('mrxiong',20),判斷是否可執行,請可以訪問name、age、email的值分別是什么?
func('mrxiong',20)
#c執行func('mrxiong',20,30),判斷是否可執行,請可以訪問name、age、email的值分別是什么?
func('mrxiong',20,50)
#d執行func('mrxiong,email='[email protected]'),斷是否可執行,請可以訪問name、age、email的值分別是什么?
func('mrxiong',email='[email protected]')
#e執行func('mrxiong,email='[email protected]',age=99),斷是否可執行,請可以訪問name、age、email的值分別是什么?
func('mrxiong',email='[email protected]',age=99)
#f執行func(name='mrxiong',99),斷是否可執行,請可以訪問name、age、email的值分別是什么?
func(name='mrxiong',99)
#g執行func(name='mrxiong',99,'[email protected]'),斷是否可執行,請可以訪問name、age、email的值分別是什么?
func(name='mrxiong',99,'[email protected]')
4、看代碼寫結果
def func(users,name):
users.append(name)
return users
result = func(['mrxiong','張三'],'alex')
print(result)
#回傳結果:
#['mrxiong', '張三', 'alex']
5、看代碼寫結果
def func(users,name):
users.append(name)
return users
result = func(['mrxiong','張三'],'alex')
print(result)
輸出結果:
['mrxiong', '張三', 'alex']
6、看代碼寫結果
a = 10
b = 20
def test(a,b):
return a ,b
c = test(b,a)
print(c)
輸出結果:
(20, 10)
7、看代碼寫結果
def a(*args):
count = 0
for i in args:
count += i
return count
c = a(1,2,3,4,5)
print(c)
輸出結果:
15
三、補坑(默認引數的坑,作用域的坑)
1、如果你的默認引數指向的是可變的資料型別,那么你無論呼叫多少次這個默認引數,都是指向同一個
def func(a,list=[]):
list.append(a)
return list
print(func(10,))
print(func(20,))
輸出結果:
[10]
[10, 20]
2、在函式中,如果你定義了一個變數,但是在定義這個變數之前對其參考了,那么解釋器認為語法問題,
你應該在使用之前先定義
count = 1
def func():
print(count)
count = 3
func()
輸出結果:
UnboundLocalError: local variable 'count' referenced before assignment
3、global 全域
? 1)、在區域作用域 宣告一個全域變數
name = 'alex'
def func():
global name
name = 'mrxiong'
print(name)
func()
print(name)
輸出結果:
alex
mrxiong
2)可以修改一個全域變數
count = 1
def func1():
global count
count += 1
print(count)
func1()
print(count)
輸出結果:
1
2
4、nonlocal
不能夠操作全域于變數,區域作用域,內層函式對外層函式的區域變數進行修改
def wrapper():
count = 1
def inner():
nonlocal count
count += 1
print(count)
inner()
wrapper()
輸出結果:
1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/109014.html
標籤:Python
上一篇:python中的回圈結構
