python的函式二

2021-10-06 22:19:32 字數 4035 閱讀 8234

返回值:就是函式執⾏以後返回的結果。

可以通過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 以上兩個函式是等價的 裝飾器從字面上來說就是在...