python-4-函數-裝飾器,生成器

函數的定義和使用

1 def test(x): # x表明形參 2 ''' 3 2*x+1 4 :param x:整形數字 5 :return:返回計算結果 6 ''' 7 y = 2*x+1 8 return y 9 p = test(3) # test()表示運行名爲test函數,3表明實參,給x進行賦值 10 print(p)

函數的定義:python

  • def: 表示函數的關鍵字
  • 函數名: 函數的名稱, 根據函數名調用函數
  • 函數體: 函數中進行一系列的邏輯計算
  • 參數: 爲函數執行完畢後, 能夠給調用者返回數據

一. 爲何要用函數?

  1. 減小代碼量
  2. 保持一致性
  3. 易維

二. 函數的參數

函數有三種不一樣的參數:shell

  • 普通參數
    # ######### 定義函數 #########swift

     # name 叫作函數func的形式參數,簡稱:形參 def func(name): print name # ######### 執行函數 #########  # 'wupeiqi' 叫作函數func的實際參數,簡稱:實參 func('wupeiqi')
  • 默認參數ruby

    def func(name, age = 18): print "%s:%s" %(name,age) # 指定參數 func('wupeiqi', 19) # 使用默認參數 func('alex') 注:默認參數須要放在參數列表最後
  • 動態參數 *argsbash

    def func(*args): print args # 執行方式一 func(11,33,4,4454,5) # 執行方式二 li = [11,2,2,3,3,4,54] func(*li)
  • 動態參數 **kwargs函數

    def func(**kwargs): print args # 執行方式一 func(name='wupeiqi',age=18) # 執行方式二 li = {'name':'wupeiqi', age:18, 'gender':'male'} func(**li)

三. 函數的變量

函數的變量可分爲 全局變量和局部變量測試

全局變量(大寫)ui

定義:沒有縮進的變量spa

局部變量(小寫)code

定義:子程序下定義的變量

name = 'lhf' # 這裏就指全局變量 def change_name(): name = '帥了一比' # 這裏就指局部變量 print('change_name', name) change_name() print(name) 結果 change_name 帥了一比 lhf

global和nolocal

global聲明是全局變量,nolocal指定上一級變量

未聲明全局變量

x = 99 def func(): x = 88 func() print(x) #輸出99

聲明全局變量

x = 99 def func() global x x = 88 func() print(x) #輸出88

未指定上一級變量

def func(): count = 1 def foo(): count = 12 foo() print(count) func() #輸出1

指定上一級變量

def func(): count = 1 def foo(): nonlocal count count = 12 foo() print(count) func() #輸出12

四. 遞歸函數

ps: 用的好的都是大牛~

就是函數本身調用本身

特性:

  1. 必須有一個明確的結束條件,

  2. 每次進入深一層遞歸時,問題規模都應有所減小

    def calc(n): print(n) if int(n / 2) == 0: return n # 當上面的條件成立後一個真值,返回到函數 res = calc(int(n / 2)) print(n,res) return res # 返回res的值,要將真值一層一層傳遞回去 calc(10) 

五. lamabda匿名函數

lambda用法,冒號以前的是入參,冒號以後的是表達式,返回的值,最簡單的函數

print [(lambda x:x*x)(x)for x in range(11)] #結果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] print (lambda x:x*x)(3) #結果:9 g=lambda x:x*x print g(4) #結果:16

 

 

八,遞歸

# 本身調用本身
def func():
    print("哈哈")
    func()

func()
# 官方文檔上給的層數是 1000  實際測試的時候 998 997
相關文章
相關標籤/搜索