返回值:就是函式執⾏以後返回的結果。
可以通過return來指定函式的返回值。
return後面跟什麼值,函式就會返回什麼值。
return後⾯可以跟任意物件,返回值甚⾄可以是⼀個函式。
deffn(
):deffn2()
:print
('haha'
)return fn2
r = fn(
)print
(r)# .fn2 at 0x0000025b62d60b70>r()
# haha
deffn2()
:# return
a =123print
('hahah'
)r=fn2(
)# hahah 呼叫了fn2函式 但沒有返回值
print
(r)# none
在函式中return後的**都不會執行,return一旦執行函式自動結束。
def
fn3():
print
('hahaha'
)return
print
('123'
)r=fn3(
)# hahaha
print
(r)# none
fn 是函式物件,列印fn實際上就是在列印函式物件。
fn() 是在呼叫函式,列印fn()實際上就是在列印fn()的返回值。
deffn(
):return
123print
(fn)
# print
(fn())
# 123
def
fn(a:
int,b:
str,c:
bool)-
>
int:
''' 這是乙個文件字串的案例
引數的作用
:param a: 作用。。。型別。。。預設值。。。
:param b: 作用。。。型別。。。預設值。。。
:param c: 作用。。。型別。。。預設值。。。
:return:
'''return
123
作用域指的是變數生效的區域。
在python當中一共有兩種作用域——全域性作用域、函式作用域
全域性作⽤域:
全域性作⽤域在程式執⾏時建立,在程式執⾏結束時銷毀。
所有函式以外的區域都是全域性作⽤域。
在全域性作⽤域中定義的變數,都是全域性變數,全域性變數可以在程式的任意位置進⾏訪問。
函式作⽤域:
函式作⽤域在函式調⽤時建立,在調⽤結束時銷毀。
函式每調⽤⼀次就會產⽣⼀個新的函式作⽤域。
在函式作⽤域中定義的變數,都是區域性變數,它只能在函式內部被訪問。
b =
20deffn(
):# a定義在函式內部,所以它的作用域就是函式內部,函式外部訪問不到
a =10print
('函式內部:'
,'a = '
,a)# 函式內部: a = 10
print
('函式內部:'
,'b = '
, b)
# 函式內部: b = 20
fn()
# print('函式外部:','a = ',a) # nameerror: name 'a' is not defined
print
('函式外部:'
,'b = '
, b)
# 函式外部: b = 20
如果希望在函式內部修改全域性變數,則需要使用乙個global關鍵字來宣告變數。
a =
20def
fn3():
# 如果希望在函式內部修改全域性變數 則需要使用乙個global關鍵字 來宣告變數
global a # 宣告在函式內部的使用a是全域性變數 此時我們修改a 就是在修改全域性變數
a =10print
('函式內部:'
,'a = '
, a)
fn3(
)# 函式內部: a = 10
print
('函式外部:'
,'a = '
, a)
# 函式外部: a = 10
命名空間實際上是乙個字典,是乙個專門用來儲存變數的字典。
locals():⽤來獲取當前作⽤域的命名空間。
如果在全域性作⽤域中調⽤locals()則獲取全域性命名空間,如果在函式作⽤域中調⽤locals()則獲取函式命名空間。
返回值是⼀個字典。
globals() : 這個函式可以在任意位置獲取全域性的命名空間。
a =
880b =
30scope =
locals()
print
('當前的命名空間:'
,scope)
# 當前的命名空間: , '__builtins__': , '__file__': 'c:/pycharmprojects/命名空間.py', '__cached__': none, 'a': 880, 'b': 30, 'scope': }
print
(scope[
'a']
)# 880
scope[
'c']
=123
# 向scope中新增乙個key-value,就相當於在全域性中建立了乙個變數c
print
(c)# 123
print
('當前的命名空間:'
,scope)
# 當前的命名空間: , '__builtins__': , '__file__': 'c:/pycharmprojects/命名空間.py', '__cached__': none, 'a': 880, 'b': 30, 'scope': , 'c': 123}
deffn4()
: a =
20# 要獲取函式內部的命名空間
scope =
locals
()
scope[
'bb']=
200print
('函式內部的命名空間:'
,scope)
# 函式內部的命名空間:
# print(bb) # 列印不出來
global_scope =
globals()
# 這個函式可以在任意位置獲取全域性的命名空間
print
('全域性的命名空間:'
,global_scope)
# 全域性的命名空間: , '__builtins__': , '__file__': 'c:/pycharmprojects/命名空間.py', '__cached__': none, 'a': 880, 'b': 30, 'scope': , 'c': 123, 'fn4': }
fn4(
)
遞迴是解決問題的⼀種⽅式,它的整體思想,是將⼀個⼤問題分解為⼀個個的⼩問題,直到問題⽆法分解時,再去解決問題。
遞迴式函式有2個條件:
基線條件:問題可以被分解為最⼩問題,當滿⾜基線條件時,遞迴就不執⾏了。
遞迴條件:可以將問題繼續分解的條件。
# 用遞迴的解決方案 來實現任意數的階乘
# 10! = 9!* 10
# 9! = 8! * 9
# 。。。
# 1! = 1
deffn2
(n):
# 引數n 要求階乘的數字
# 1.基線條件 判斷n為1的時候 就不遞迴了
if n ==1:
# 1的階乘就是它本身
return
1# 2.遞迴條件
return n * fn2(n-1)
print
(fn2(10)
)# 3628800
Python中的函式(二)
由於python的函式是物件,很多在其他語言中比較難的構造在python中非常容易實現,例如在資料清洗中,我們需要將一些變形應用到下列字串列表中 data alabama georgia georgia georgia florida south carolina west virginia?為了使...
python學習(二) 函式
在python中,定義乙個函式要使用def語句,依次寫出函式名 括號 括號中的引數和冒號 然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。如果沒有return語句,函式執行完畢後也會返回結果,只是結果為none return none可以簡寫為return。如果想定義乙個什麼事也不做...
python 高階函式(二)
python中用關鍵字lambda表示匿名函式,匿名函式只有一條語句,很簡潔也沒有函式名 lambda 引數 返回值 lambda可以不傳引數,但必須要有返回值 f lambda x,y x y f 1,2 3 def f x,y return x y 以上兩個函式是等價的 裝飾器從字面上來說就是在...