Python函數基礎

來源:互聯網
上載者:User

標籤:python

1、函數的定義及調用

In [173]: def add(x,y):     ...:     print(x+y)     ...:     return x + y     ...: In [174]: add(3,5)8Out[174]: 8


2、函數的參數

In [177]: def add(x,y):     ...:     ret = x + y     ...:     print(‘{} + {} = {}‘.format(x,y,ret))     ...:     return ret     ...:          ...: In [178]: add(3,5)  #參數按照定義的順序傳入,這樣的傳參方法叫位置參數3 + 5 = 8Out[178]: 8In [179]: In [179]: add(y=3,x=5) #參數按照定義時的變數名傳遞,這樣的傳參方法叫關鍵字參數5 + 3 = 8Out[179]: 8In [181]: def inc(base,x=1):     #x=1就代表是預設值參數     ...:     return base + x     ...: In [182]: inc(3)Out[182]: 4In [183]: inc(3,2)Out[183]: 5可變參數In [184]: def sum(*lst):     ...:     print(type(lst))     ...:     ret = 0     ...:     for x in lst:     ...:         ret += x     ...:     return ret     ...: #*lst   參數前加一個星號,表示這個參數是可變的,也就是可以接受任意多個參數,這些參數將構成一個元組,此時只能通過位置參數傳參     In [185]: sum(1,2,3)<class ‘tuple‘>Out[185]: 6In [186]: def connect(**kwargs):     ...:     print(type(kwargs))     ...:     for k,v in kwargs.items():     ...:         print(‘{} => {}‘.format(k,v))     ...:         #**kwargs  參數前面加兩個星號,表示這個參數是可變的,可以接受任意多個參數,這些參數構成一個字典,此時只能通過關鍵字參數傳參In [187]: connect(host=‘127.0.0.1‘,port=3306)<class ‘dict‘>port => 3306host => 127.0.0.1可變參數兩種形式:位置可變參數 : 參數名前加一個星號, 構成元組, 傳參只能以位置參數的形式關鍵字可變參數: 參數名前加兩個訊號, 構成字典, 傳參只能以關鍵字參數的形式In [190]: def fn(x,y,*args,**kwargs):     ...:     print(x)     ...:     print(y)     ...:     print(args)     ...:     print(kwargs)     ...:     In [191]: fn(1,2,3,4,5,a=1,b=2)12(3, 4, 5){‘a‘: 1, ‘b‘: 2}通常來說:預設參數靠後可變參數靠後預設參數和可變參數不同時出現


3、參數解構

In [192]: def add(x,y):     ...:     ret =  x + y     ...:     print(‘{} + {} = {}‘.format(x,y,ret))     ...:     return ret     ...: In [193]: add(1,2)1 + 2 = 3Out[193]: 3In [194]: t = 1,2In [195]: tOut[195]: (1, 2)In [196]: add(t[0],t[1])1 + 2 = 3Out[196]: 3In [197]: In [197]: add(*t)1 + 2 = 3Out[197]: 3#*t 位置參數解構,加一個星號,可以把可迭代對象解構成位置參數In [198]: add(*range(2))0 + 1 = 1Out[198]: 1In [199]: In [199]: d = {‘x‘:1,‘y‘:2}In [200]: add(**d)1 + 2 = 3Out[200]: 3#**d 關鍵字參數解構,加兩個星號,可以把字典解構成關鍵字參數參數解構的兩種形式一個星號 解構的對象:可迭代對象 解構的結果:位置參數兩個星號 解構的對象:字典 解構的結果:關鍵字參數keyword-only參數In [201]: def fn(*,y):     ...:     print(y)     ...:     #* 星號之後的參數只能通過關鍵字參數傳遞,交過keyword-only參數In [202]: fn(y=3)3

4、參數的範圍

In [203]: def fn():     ...:     x = 1     ...:     print(x)     ...:     def inner():     ...:         print(x)     ...:     inner()     ...:     In [204]: fn()11#上級範圍對下級可見


5、匿名函數

In [208]: lambda x: x+1Out[208]: <function __main__.<lambda>>In [209]: (lambda x: x+1)(3)Out[209]: 4In [210]: f = lambda x: x+2In [211]: f(2)Out[211]: 4lambda 來定義參數列表不需要用小括弧冒號不是用來開啟新語句塊沒有return, 最後一個運算式的值即傳回值

6、產生器

In [212]: def g():     ...:     for x in range(10):     ...:         yield x   #yield表示彈出一個值     ...:         In [213]: r = g()  #函數已經執行完成,函數的現場應該已經被銷毀,但是事實上,函數的現場並沒有被銷毀In [214]: rOut[214]: <generator object g at 0x7f3d60330938>In [215]: next(r)Out[215]: 0In [216]: next(r)Out[216]: 1In [217]: next(r)Out[217]: 2In [218]: def gen():     ...:     print(‘a‘)     ...:     yield 1     ...:     print(‘b‘)     ...:     yield 2     ...:     return 3     ...: In [219]: g = gen() #執行產生器函數的時候,函數體並沒有被執行In [220]: next(g) #執行到第一個yield,停止執行aOut[220]: 1In [221]: next(g)  #從第一個yield之後開始執行, 在第二個yield的時候停止bOut[221]: 2帶yield語句的函數稱之為產生器函數, 產生器函數的傳回值是產生器產生器函數執行的時候,不會執行函數體當next產生器的時候, 當前代碼執行到之後的第一個yield,會彈出值,並且暫停函數當再次next產生器的時候,從上次暫停處開始往下執行當沒有多餘的yield的時候,會拋出StopIteration異常,異常的value是函數的傳回值In [226]: def counter():     ...:     x = 0     ...:     while True:     ...:         x += 1     ...:         yield x     ...:         In [227]: def inc(c):     ...:     return next(c)     ...: In [228]: c = counter()In [229]: inc(c)Out[229]: 1In [230]: inc(c)Out[230]: 2In [231]: d = counter()In [232]: next(d)Out[232]: 1In [233]: next(d)Out[233]: 2In [234]: next(d)Out[234]: 3In [242]: def make_inc():     ...:     def counter():     ...:         x = 0     ...:         while True:     ...:             x += 1     ...:             yield x     ...:     c = counter()     ...:     return lambda: next(c)     ...:          ...:          ...: In [243]: incr = make_inc()In [244]: incrOut[244]: <function __main__.make_inc.<locals>.<lambda>>In [245]: incr()Out[245]: 1In [246]: incr()Out[246]: 2


本文出自 “厚德載物” 部落格,謝絕轉載!

Python函數基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.