Python基礎day-6[函數,命名空間,作用域]
函數的返回值
通常有參函數是需要返回值的。
返回值的幾種形式:
1.如果函數內沒有return就返回None
2.return 返回的數據類型沒有限制,也可以返回多個值,以元組形式,括號可加可不加
return的效果:
終止函數的執行,只能返回一次值.
函數參數的使用
python是一種弱類型的語言,參數可以傳入任何類型數據
形參與實參:可以理解為形參就是變量名,而實參就是變量值
def foo(x,y) #x,y 是形參
return x+y
foo(1,2) #1,2 是實參
位置參數
def foo(x,y): #按位置定義的形參,必須被傳值,多一個少一個都不行。
print(x)
print(y)
foo(1,2) #按位置定義的實參,會一一跟形參對應。
關鍵字參數:指的是實參在定義時,按照key=value形式定義。
def foo(x,y): #形參還是按位置定義的。
print(x)
print(y)
foo(y=1,x=2) #打破位置的限制,不需要跟形參一一對應,直接指定傳值。但是還要遵循不能多不能少。
註意的問題:
1.位置實參可以和關鍵字實參混合使用,但是位置實參必須在關鍵字實參的前面。
2.位置實參可以和關鍵字實參混合使用,但是一個形參只能被傳值一次不能被重復傳值。
默認參數
def foo(x, y=10): # 形參在定義的時候賦值。
print(x)
print(y)
foo(x=2) # 實參可以不輸入對應的形參,如果輸入了就不使用默認參數。
註意的問題:
1.必須放在位置參數後面。
2.默認參數通常要定義成不可變類型。
3.默認參數只在定義時被賦值一次。
形參的應用:值經常變化的需要定義成位置形參,值大多數情況下都一樣需要定義默認參數。
實參的應用:怎麽爽怎麽用,但是要遵循相應的規則。
可變長參數:可變長值得是實參的個數不固定 *號等同位置參數
按位置定義的可變長實參:*
按關鍵字定義的可變長實參:**
def func(x,y,*args): #x=1 y=2, args=(3,4,5,6)元組形式
print(x,y)
print(args)
func(1,2,3,4,5,6) #實參為位置參數使用*args
func(1,2,*(3,4,5,6)) #等同於 func(1,2,3,4,5,6)
D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py 1 2 (3, 4, 5, 6) 1 2 (3, 4, 5, 6) Process finished with exit code 0
def func(x, y, **kwargs): # x=1 y=2, kwargs={‘z’:6} 字典形式
print(x, y)
print(kwargs)
func(x=2, y=4, z=6) #實參為關鍵字使用**kwargs
D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py 2 4 {‘z‘: 6} Process finished with exit code 0
命名關鍵字參數:*後面定義的形參(*,name,age)必須以關鍵字形式被傳值
def regist(*,name,age):
print(name)
print(age)
regist(name=‘abc‘,age=11)
D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py abc 11 Process finished with exit code 0
形參:位置參數,默認參數,*.args 命名關鍵字參數,**kwargs #一般定義形參就按照這種順序
函數的嵌套調用
def max2(x,y):
if x > y:
return x
else:
return y
def mx4(a,b,c,d):
res1=max2(a,b)
res2=max2(res1,c)
res3=max2(res2,d)
return res3
函數的嵌套定義:函數中定義函數,並且只能在同級調用
def f1():
def f2():
def f3:
print(‘f3‘)
print(‘f2‘)
print(‘f1‘)
名稱空間與作用域
命名空間:存放名字與值的綁定關系
種類:
內置名稱空間
內置在Python解釋器內的自帶的名字,解釋器一啟動就生成這個空間
全局名稱空間
文件級別定義的名字都會存放於全局名稱空間,執行python文件時會產生,下面示例
x = 1
def func():
pass
class foo:
pass
import os
if 1 > 2:
y = 3 #這裏y沒有頂頭寫但也是全局變量
局部名稱空間
定義在函數內部的名字,
局部名稱空間只有在調用函數的時候生效,執行完畢失效
三種加載順序:內置=====>全局======>局部
取值:局部>全局>內置
示例:
max = 10
def tmp():
max = 20
print(max)
tmp() #會打印出20 因為局部優先於全局
作用域:作用範圍
種類:
全局作用域
內置名稱空間和全局名稱空間的名字,作用範圍是全局範圍。在整個文件的任意位置都能被引用,全局有效。
局部作用域
局部名稱空間中的名字,作用範圍是局部範圍生效。只在函數內部可被引用,局部有效
局部作用域=====>全局作用域
函數的作用域在定義的時候就已經固定死了。
補充:
搜尋變量時,只能由“內”看“外”。不可以反過來。例如在函數內部定義的變量,無法在全局被直接引用。
但是如果在函數內部引用一個變量,但是函數內沒有定義,那麽會去全局作用域搜尋變量。
x = 1
def func():
x =2
print(globals()) #打印全局作用域name
print(locals()) #打印局部作用域name
func()
函數對象:函數是第一類對象,指的是函數可以被當數據傳遞
可以被引用,可以當函數的返回值,可以當容器的元素
Python基礎day-6[函數,命名空間,作用域]