Python 基礎:函數(shù)返回值,文檔字符串,作用域,遞歸

一、函數(shù)返回值

  • 返回函數(shù)執(zhí)行的結果
    通過return來指定函數(shù)的返回值
    函數(shù)的返回值可以直接使用。另一種方式是通過一個變量來接收函數(shù)的返回值
def fn2():
  print('abc')
  return
r=fn2()
  • return后面可以跟任意的對象,甚至可以是一個函數(shù)
  def fn():
      print(‘hello’)
       def fn2():
           print(‘ejoaj’)
  return fn2
  r = fn()
  • 函數(shù)中Return 后面的語句不執(zhí)行

fn是函數(shù)對象,print(fn)就是打印函數(shù)對象

fn()是調用函數(shù),print(fn())就是打印fn()的返回值


二、文檔字符串

  • 在定義函數(shù)時,可以在函數(shù)內(nèi)部編寫文檔字符串,即函數(shù)的說明
    help()驗證:內(nèi)置函數(shù) 可以查詢python中函數(shù)的用法
    語法: help(函數(shù)對象)
def fn(a,b,v):
    '''
    這是一個文檔字符串的案例
    這個函數(shù)的作用。。。。
    函數(shù)的參數(shù)
    :param a:作用,類型, 默認值。。。 
    :param b: 
    :param v: 
    :return: 需要/不需要
    '''
   return 123
help(fn)
>>fn(a, b, v)
    這是一個文檔字符串的案例
    這個函數(shù)的作用。。。。
    函數(shù)的參數(shù)
    :param a:作用,類型, 默認值。。。
    :param b:
    :param v:
    :return: 需要/不需要

三、函數(shù)的作用域

作用域(scope):指的是變量生效的區(qū)域
  • 2種作用域:
    全局作用域:在函數(shù)以外的區(qū)域,可在程序任意位置訪問。
    函數(shù)作用域:在函數(shù)調用時創(chuàng)建,函數(shù)結束后銷毀,只能在函數(shù)內(nèi)部使用。
b=20
def fn():
    a = 123
    print('函數(shù)內(nèi)部:a=',a)
    print('函數(shù)內(nèi)部:b=', b)
fn()
#print('函數(shù)內(nèi)部:a=', a) :NameError: name 'a' is not defined
print('函數(shù)外部:b=', b)
>>函數(shù)內(nèi)部:a= 123
函數(shù)內(nèi)部:b= 20
函數(shù)外部:b= 20
def fn2():
    a = 123
    def fn3():
        a=40
        print('函數(shù)內(nèi)部:a=', a)
    fn3()
fn2()
>>函數(shù)內(nèi)部:a= 40

在函數(shù)內(nèi)修改全局變量,需要使用global關鍵字來聲明局部變量

a=346
def fn3():
    global a
    a=123
    print('函數(shù)內(nèi)部:a=', a)
fn3()
print('函數(shù)外部:a=', a)
>>函數(shù)內(nèi)部:a= 123
函數(shù)外部:a= 123

四、命名空間

  • 命名空間 是一個用來保存變量的字典
  • locals():獲取當前作用域的空間 返回一個字典
a=123
b=124
scope=locals()
#print(scope)
print(scope['a'])
scope['c']=797#向scope里面添加了一個KEY-VALUE 是全局變量 不可在函數(shù)內(nèi)部使用
print(c)
>> 123
>>797
  • 在函數(shù)內(nèi)部調用locals(),獲取函數(shù)的命名空間
def fn():
    a=23
    scope=locals() 
    print(scope)
fn()
  • 在函數(shù)內(nèi)部 獲取全局的命名空間 globals()
d=23
def fn():
    a=23
    s=globals() #在函數(shù)內(nèi)部調用locals(),獲取函數(shù)的命名空間
    print(s['d'])
fn()
>>23

五、遞歸函數(shù):在函數(shù)中自己引用自己

  • 1.0遞歸是解決問題的一種思想,和循環(huán)很像。

  • 2.0 把一個大的問題分解為一個小的問題,直到問題無法分解時再去解決問題

  • 3.0 遞歸函數(shù)的兩個條件:
    基線條件:問題可以被分解為最小的問題,當滿足基線條件時,遞歸就不在執(zhí)行了
    遞歸條件:將問題繼續(xù)分解的條件

  • 嘗試求10的階乘(10?。?/p>

def fn(n):
   for i in range(1,n):
        n *=i
    print(n)
fn(10)
>>3628800
  • 遞歸方法:求階乘函數(shù)
def fn(n):
#1.基線條件 :10=10*9! 9=9*8! 8!=8*7!。。。
    if n ==1:
        return 1
    else:
#2 遞歸條件: return n*fn2(n-1)
        return n * fn(n - 1)
print(fn(10))
>>3628800
  • 用遞歸函數(shù)定義一個函數(shù),為任意數(shù)字做任意的冪運算
def fn(n,i):
# 1.基線條件:
    if i==1:
       return n
#2 遞歸條件:
    else:
        return n*fn(n,i-1)
print(fn(2,3))
>>8
  • 定義函數(shù) 用來檢測任意一個字符串是否是回文字符串,如果是True,不是返回False: (回文字符串:如 ABCBA 前后讀一樣)
def fn(s):
    i=len(s)
# 1.基線條件
    if i==1:
       return True
    elif s[0]!=s[-1]:
       return False
    else:
        return fn(s[1:-1])
print(fn('sdfkj'))
>> False

案例:漢羅塔游戲 fn(n,'A','B','C')

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容