1. 程式人生 > >Python之旅.第三章.函數3.28

Python之旅.第三章.函數3.28

傳值 int 類型 內存 輸入關鍵字 pass 文件的 tps sta

一、命名關鍵字參數:

什麽是命名關鍵字參數?
格式:在*後面參數都是命名關鍵字參數
特點:
1 必須被傳值
1 約束函數的調用者必須按照key=value的形式傳值
2 約束函數的調用者必須用我們指定的key名

def foo(x,y,*,z): #創建foo函數,z為命名關鍵字參數
print(x,y,z)
#foo(1,2,aaa=3) #報錯,z為命名關鍵字參數,只能用用關鍵字z=值
foo(1,2,z=3)
——————————————————————————————
def auth(*args,name,pwd): #設定,name,pwd為命名關鍵字參數
print(name,pwd)

auth(pwd=‘213‘,name=‘egon‘) #輸入關鍵字參輸

二、函數的嵌套:

1、函數的嵌套調用:在函數內又調用了其他函數
def max2(x,y): #判斷兩個值大小,返回大的值
if x > y:
return x
else:
return y

def max3(x,y,z): #用嵌套方法判斷三個數的值
res1=max2(x,y)
res2=max2(res1,z)
return res2

print(max3(11,199,2))


2、函數的嵌套定義:在函數內又定義其他函數
def func1():            #定義func1函數
print(‘from func1‘)
def func2(): #func2=內存地址 #嵌套定義func2函數
print(‘from func2‘)

print(func2) #<function func1.<locals>.func2 at 0x0000024907A098C8> #輸出func2函數名地址
func2()

func1()

——————————————————————————————————

def f1(): #嵌套定義,調用f1執行,得出所有函數輸出的值,全部被使用
print(‘f1‘)
def f2():
print(‘f2‘)
def f3():
print(‘f3‘)
f3()
f2()
f1()

‘‘‘
f1
f2
f3
‘‘‘
三、命名空間與作用域
一:名稱空間:存放名字與值綁定關系的地方
x=1111111111

def func():
pass

二:名稱空間分為三類

1 內置名稱空間:存放Python解釋器自帶的名字,在解釋器啟動時就生效,解釋器關閉則失效

2、全局名稱空間:文件級別的名字,在執行文件的時候生效,在文件結束或者在文件執行期間被刪除則失效

3、局部名稱空間:存放函數內定義的名字(函數的參數以及函數內的名字都存放與局部名稱空間),
在函數調用時臨時生效,函數結束則失效

加載順序:內置名稱空間-》全局名稱空間-》局部名稱空間
查找名字:局部名稱空間-》全局名稱空間-》內置名稱空間


len=‘global‘ #調用f1,運行到f2方法輸出len,從當前向外查找值,最後輸出為global
def f1():
# len=1
def f2():
# len=2
print(len)
f2()

f1()

三:作用域
全局作用域:包含的是內置名稱空間與全局名稱空間的名字,
特點
1在任何位置都能夠訪問的到
2該範圍內的名字會伴隨程序整個生命周期

局部作用域:包含的是局部名稱空間的名字
特點:
1、只能在函數內使用
2、調用函數時生效,調用結束失效
四、函數對象
函數在python中是第一類對象?

1、可以被引用
def bar(): #創建bar函數
print(‘from bar‘)

f=bar #引用bar函數
f()

2、可以當中參數傳入
def bar(): #創建bar函數
print(‘from bar‘)

def wrapper(func): #func=bar #創建wrapper函數,設定參數func
func() #bar()

wrapper(bar) #把bar當做參數傳入


3、可以當做函數的返回值
def bar(): #創建bar函數
print(‘from bar‘)

def foo(func): #func=<function bar at 0x00000225AF631E18> #創建foo函數,設定變量func,返回變量func
return func #return <function bar at 0x00000225AF631E18>

f=foo(bar) #f=<function bar at 0x00000225AF631E18> #把bar函數當做參數傳入變量func,成為foo函數的返回值
f()

4、可以當中容器類型的元素
def get(): #創建get 函數
print(‘from get‘)

def put(): #創建put函數
print(‘from put‘)

l=[get,put] #建立列表輸入兩個函數

l[0]() #安索引調用get函數
——————————————————————————————————
例:
def func():
print(‘from func‘)

1、func可以被引用
f=func

2、func可以當作參數傳給x
def bar(x):
print(x)
x()

bar(func)

3、func還可以當作返回值
def bar(x): # x=func
return x #return func

res=bar(func) #res=func
print(res)
res()


4 可以當中容器類型的元素
def auth():
print(‘登陸。。。。。‘)

def reigster():
print(‘註冊。。。。。‘)

def search():
print(‘查看。。。。‘)

def transfer():
print(‘轉賬。。。。‘)

def pay():
print(‘支付。。。。‘)

dic={
‘1‘:auth,
‘2‘:reigster,
‘3‘:search,
‘4‘:transfer,
‘5‘:pay
}

print(dic)
dic[‘2‘]()

def interactive():
while True:
print("""
1 認證
2 註冊
3 查看
4 轉賬
5 支付
""")
choice=input(‘>>: ‘).strip()
if choice in dic:
dic[choice]()
else:
print(‘非法操作‘)


interactive()

五、閉包函數
1、閉包函數

閉:指的是定義在函數內部的函數
!!!作用域關系 在函數定義階段就規定死了,與調用位置無關
def outter(): #創建outter函數,創建變量x
x=2      
def inner(): #創建inner函數,輸出x
# x=1
print(‘from inner‘,x)

return inner #返回inner函數


f=outter() #f=inner #把返回的嵌套定義函數賦予f,這樣f就可以調用被嵌套定義的函數了
f()

閉包函數:
1、定義在函數內部的函數
2、 並且該函數包含對外部函數作用域中名字的引用,該函數就稱為閉包函數

def outter(): #定義函數outter,並定義變量name
name=‘egon‘
def inner():
print(‘my name is %s‘ %name) #定義函數inner,輸出name

return inner #返回函數inner


f=outter() #把嵌套定義函數inner賦值給f

了解:
為函數體傳值的方式
方式一:將值以參數的形式的傳入
import requests #閉合函數,變換變量,變換地址
def get(url):
response=requests.get(url)
if response.status_code == 200:
print(response.text)
get(‘https://www.baidu.com‘)

方式二
import requests
import time

def outter(url): #url=‘https://www.baidu.com #定義函數outter,形參url
def get():          #定義函數 get 根據網址,怕網址數據
response=requests.get(url)
if response.status_code == 200:
print(response.text)

return get #返回函數get


baidu=outter(‘https://www.baidu.com‘) #把帶實參百度地址的函數賦予baidu,以後只需要運行只需要運行baidu()就可以了
python=outter(‘https://www.python.org‘) #把帶實參python地址的函數賦予python,以後只需要運行只需要運行python()就可以了

 
 

Python之旅.第三章.函數3.28