Python 基礎之返回值與函數使用與局部變量和全局變量locals() 和 globals()

一.函數的返回值 return

return: 自定義返回值,返回到哪裏? 返回到函數的[調用處]
1.return 後面能夠跟上六個標準數據類型,除此以外,能夠跟上 類對象,函數,若是不寫return,默認返回None
2.return 若是執行了return,意味着,return後面的全部代碼,統統不執行,函數終止了
#(1)return 後面的數據類型
#:
python

def func():
    #return 1        #整型
    #return 3.14     #浮點型
    #return True     #bool類型
    #return 4j       #複數
    #return [1,2,3,4]  #列表
    return {"a":1,"b":2} #字典

res = func() # res = {"a":1,"b":2}
print(res)

#(2)若是不寫return,默認返回None
def func():
    a = 1
res = func()
print(res)  #None

#(3) 執行完return以後,函數馬上終止,後面的代碼不執行函數

#:
def func():
    print("執行到1")
    print("執行到2")
    return 1
    print("執行到3")
    print("執行到4")
    return 2
res = func()
print(res)
結果:ui

執行到1spa

執行到2對象

1內存


#(4)計算器作用域

#:
print("<------------------->")
def calc(sign,num1,num2):
    if sign == "+":
        res = num1 + num2
    elif sign == "-":
        res = num1 - num2
    elif sign == "*":
        res = num1 * num2
    elif sign == "/":
        if num2 == 0:
            return "大兄弟,除數不能爲0"
        res = num1 / num2
    else:
        return "不會,別問我!!!!!!你是個有趣的靈魂."
    return res
res2 = calc("^",5,0)
print(res2)
print("=============")
res3 = calc("+",5,32)文檔

print(res3)字符串

結果爲:io

不會,別問我!!!!!!你是個有趣的靈魂.

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

37

 

 

二.函數的使用

#python中的函數能夠像變量同樣,動態建立,銷燬,當參數傳遞,做爲返回值,叫第一類對象,其餘語言功能有限
#:
def func():
    print(1)
 #輸出:1

1.函數名是個特殊的變量,能夠當作變量賦值

#變量的賦值操做
func2 = func
func2() #func()

#動態的銷燬變量
del func2 #del 關鍵字 用來刪除變量的
#func2() #error

2.函數名能夠做爲容器類型數據的元素

print("<=============>")
def func1():
    print(1)
def func2():
    print(2)
def func3():
    print(3)
def func4():
    print(4)

#也能夠這樣:法一:
#lst = [func1(),func2(),func3(),func4()]
#for i in lst:
#     i

結果爲:

1

2

3

4

#法二:
lst = [func1,func2,func3,func4]
for i in lst:
    #print(i)
    i()  #函數的調用

結果爲:

1

2

3

4

3.函數名能夠做爲函數的參數

#1:

def func(a): #a = func2
    res = a()
    print(res)

def func2():
    return 123
func(func2)

#結果解析:

#func2 => 123 => res = 123

4.函數名做爲函數的返回值

#:
def func(a): #a =>
    return a

def func2():
    return 456

#函數的調用
res = func(func2) #func2是一個函數地址
print(res)   #的地址
total = res() #res() ==> func2()
print(total)

結果爲:

<function func2 at 0x00000000027310D0>

456

#__doc__或者help查看文檔
#(1)help
#help (print)
#(2)__doc__魔術屬性
res = print.__doc__
print(res)

#(3)自定義函數文檔
print("-==================")
def kao_qiezi(qimin):
    '''
    功能:告訴你如何作茄子
    參數:是一個器皿
    返回值:返回燒烤狀態
    '''
    print("從中間拋開,扔到燒烤架子上面")
    print("扔胡椒麪,扔孜然,扔蒜蓉,扔香菜")
    print("用一個%s來盛放" %(qimin))
    return "這個茄子作好了"
kao_qiezi("盤")
print("====-------=======")
help(kao_qiezi)
print('4567==============')
res =kao_qiezi.__doc__
print(res)

結果爲:(第一個輸出函數的結果,第二和第三輸出都是幫助文檔內容)

從中間拋開,扔到燒烤架子上面

扔胡椒麪,扔孜然,扔蒜蓉,扔香菜

用一個盤來盛放

====-------=======

Help on function kao_qiezi in module __main__:

 

kao_qiezi(qimin)

    功能:告訴你如何作茄子

    參數:是一個器皿

    返回值:返回燒烤狀態

 

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

 

    功能:告訴你如何作茄子

    參數:是一個器皿

返回值:返回燒烤狀態

 

三.局部變量 與 所有變量

局部變量:在函數內部聲明的變量就是局部變量
全局變量:在函數外部聲明的變量或用global關鍵字在函數內部聲明的變量
做用域:做用的範圍
局部變量:做用範圍在函數的內部
全局變量:做用範圍橫跨整個文件

1.局部變量的獲取和修改

def func():
    a = 1
    #獲取局部變量
    print(a)
    #修改局部變量
    a = 2
    print(a)
func()

2.全局變量的獲取和修改

#1:

c = 15
#獲取
#修改
c = 78
print(c)

#在函數內部經過global 修改全局變量

def func():
    #若是不加global c 只能獲取 不能修改
    #加了global c 告訴系統在函數內部容許修改全局變量c
    global c
    print(c)
    c = 90
func()
print("======全局變量=====")
print(c)
結果:

78

78

======全局變量=====

90

 

#2:
#在函數內部經過global 定義全局變量
def func():
    global ff
    ff = 908
    print(ff)
func()
print(ff)

 

輸出:

908

908

python特有:
若是外部存在該全局變量,那麼利用golbal關鍵字,能夠容許在函數內部修改全局變量
若是外部不存在該全局變量,那麼利用global關鍵字,能夠容許在函數內部定義全局變量
在使用global 關鍵字的時候,通常寫在函數內部的第一行

 

四.locals()  globals()

#locals  globals

1.locals 獲取當前做用域的全部變量

locals 若是在函數外面,獲取locals()返回值打印以前,全部的內容
locals 若是在函數的裏面,獲取locals調用以前,全部的內容
#1:
#獲取打印返回值以前的全部內容
a = 10
b = 20
res = locals()
c = 20
print(res) 
d = 30
運行後可知d沒有被存到locals()的內存中c是有的,以下爲res的打印,是一個字典,沒有d的鍵值對:

 

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000179AD15C2B0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/pystu/pystudy/Knight/test.py', '__cached__': None, 'a': 10, 'b': 20, 'res': {...}, 'c': 20}

 


#2:

#獲取locals調用以前的全部的內容
def func():
    f1 = 11
    f2 = 12
    res = locals()
    f3 = 13
    print(res)

func()
輸出的結果:(f3沒有到res內存中的)

{'f2': 12, 'f1': 11}

2.globals 只獲取全局變量(不管在函數內外都只獲取全局變量)

globals 若是在函數的外面,獲取globals() 返回值打印以前,全部內容
globals 若是在函數的裏面,獲取globals調用以前,全部的內容

#1:
a = 15
b = 15
res = globals()
c = 26
print(res)
d =27
#res的結果中,c 沒有d

#2:
z1 = 5
z2 = 6
def func():
    f1 = 1
    f2 = 2
    f3 = 3
    res = globals()
    f4 = 6
    print(res)
z4 = 8
func() #res = globals()

z3 = 7
#由於f1,f2,f3,f4是局部變量因此都沒有,而後是獲取打印以前的因此沒有z3

3.globals 動態建立全局變量

globals 返回的是系統的 全局命名空間的字典 在空間裏面放的全局變量
#:
dic = globals()
print(dic,type(dic))
dic['wangwen'] = 188
print(dic['wangwen'])

#已經在dic字典中了


#2:#globals 能夠批量建立全局變量def func():    res = globals()    for i in range(5):        res["a%d" % (i)] = i        '''        "a%d" % (i) #字符串的格式化      res['a0'] = 0      res['a1'] = 1      res['a2'] = 2      res['a3'] = 3      res['a4'] = 4                        '''func()print(a0)print(a1)print(a2)print(a3)print(a4)

相關文章
相關標籤/搜索