最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

初學Python函數(shù)的筆記整理

 更新時間:2015年04月07日 09:49:19   投稿:goldensun  
這篇文章主要介紹了初學Python函數(shù)的整理筆記,包括一些基礎的參數(shù)使用方法以及匿名函數(shù)等特性的使用,需要的朋友可以參考下

 定義
返回單值

def my_abs(x):
  if x >= 0:
    return x
  else:
    return -x
 

返回多值

返回多值就是返回一個tuple

import math
 
def move(x, y, step, angle=0):
  nx = x + step * math.cos(angle)
  ny = y - step * math.sin(angle)
  return nx, ny

空函數(shù)
 

def nop():
  pass

指定默認參數(shù)

必選參數(shù)在前,默認參數(shù)在后。默認參數(shù)需指向不可變對象(默認參數(shù)值在函數(shù)定義時被計算)
 

def power(x, n=2):
  s = 1
  while n > 0:
    n = n - 1
    s = s * x
  return s

可變參數(shù)
 

def calc(*numbers):
  sum = 0
  for n in numbers:
    sum = sum + n * n
  return sum

調(diào)用可變參數(shù)的函數(shù)方法
 

>>> calc(1, 2)
5
>>> calc()
0
>>> nums = [1, 2, 3]
>>> calc(*nums)
14

關鍵字參數(shù)
 

def person(name, age, **kw):
  print 'name:', name, 'age:', age, 'other:', kw

調(diào)用關鍵字參數(shù)的方法
 

>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
>>> kw = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **kw)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

注:

    參數(shù)定義的順序必須是:必選參數(shù)、默認參數(shù)、可變參數(shù)和關鍵字參數(shù)。
    對于任意函數(shù),都可以通過類似func(*args, **kw)的形式調(diào)用它,無論它的參數(shù)是如何定義的。

遞歸

如果一個函數(shù)在內(nèi)部調(diào)用自身本身,這個函數(shù)就是遞歸函數(shù)。
尾遞歸

在函數(shù)返回的時候,調(diào)用自身本身,并且,return語句不能包含表達式。
高階函數(shù)

  •     變量可以指向函數(shù)(函數(shù)可以賦值給一個變量)
  •     函數(shù)名也是變量(函數(shù)名可以賦值其他值)
  •     函數(shù)可以做為函數(shù)的參數(shù)(高階函數(shù))

map(func, list)

map()函數(shù)接收兩個參數(shù),一個是函數(shù),一個是序列,map將傳入的函數(shù)依次作用到序列的每個元素,并把結果作為新的list返回。
 

>>> def f(x):
...   return x * x
...
>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce(func_with_two_params, list)

reduce把一個函數(shù)作用在一個序列[x1, x2, x3…]上,這個函數(shù)必須接收兩個參數(shù),reduce把結果繼續(xù)和序列的下一個元素做累積計算。
 

reduce(f, [x1, x2, x3, x4])
#相當于:
f(f(f(x1, x2), x3), x4)
 
>>> def add(x, y):
...   return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

filter(func_return_bool, list)

把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。
 

def is_odd(n):
  return n % 2 == 1
 
filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# 結果: [1, 5, 9, 15]

sorted

對于兩個元素x和y,如果認為x < y,則返回-1,如果認為x == y,則返回0,如果認為x > y,則返回1,
 

>>> sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]

高階函數(shù)用法
 

def reversed_cmp(x, y):
  if x > y:
    return -1
  if x < y:
    return 1
  return 0
 
>>> sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]

函數(shù)做為返回值
 

def lazy_sum(*args):
  def sum():
    ax = 0
    for n in args:
      ax = ax + n
    return ax
  return sum
 
>>> f = lazy_sum(1, 3, 5, 7, 9)
>>> f
<function sum at 0x10452f668>
>>> f()
25

注:每次調(diào)用lazy_sum()都會返回一個新的函數(shù),即使傳入相同的參數(shù)。
閉包
 

def count():
  fs = []
  for i in range(1, 4):
    def f():
       return i*i
    fs.append(f)
  return fs
 
f1, f2, f3 = count()
>>> f1()
9
>>> f2()
9
>>> f3()
9

原因是調(diào)用count的時候循環(huán)已經(jīng)執(zhí)行,但是f()還沒有執(zhí)行,直到調(diào)用其時才執(zhí)行。所以返回函數(shù)不要引用任何循環(huán)變量,或者后續(xù)會發(fā)生變化的變量。
匿名函數(shù)(lambda表達式)
 

等價于:
 

def f(x):
  return x * x

關鍵字lambda表示匿名函數(shù),冒號前面的x表示函數(shù)參數(shù)。
匿名函數(shù)做為返回值
 

def build(x, y):
  return lambda: x * x + y * y

裝飾器(@func)

在代碼運行期間動態(tài)增加功能的方式,稱之為“裝飾器”(Decorator),本質(zhì)上,decorator就是一個返回函數(shù)的高階函數(shù)。
 

def log(func):
  def wrapper(*args, **kw):
    print 'call %s():' % func.__name__
    return func(*args, **kw)
  return wrapper
 
@log
def now():
  print '2013-12-25'
 
>>> now()
call now():
2013-12-25
 
#相當于執(zhí)行:
 
now = log(now)
回到頂部
帶參數(shù)的裝飾器
 
def log(text):
  def decorator(func):
    def wrapper(*args, **kw):
      print '%s %s():' % (text, func.__name__)
      return func(*args, **kw)
    return wrapper
  return decorator
 
@log('execute')
def now():
  print '2013-12-25'
 
#執(zhí)行結果
>>> now()
execute now():
2013-12-25
 
#相當于執(zhí)行:
 
>>> now = log('execute')(now)

剖析:首先執(zhí)行l(wèi)og('execute'),返回的是decorator函數(shù),再調(diào)用返回的函數(shù),參數(shù)是now函數(shù),返回值最終是wrapper函數(shù)。

__name__
由于函數(shù)的__name__已經(jīng)改變,依賴于此的代碼就會出錯。因此使用functools.wraps。
 
import functools
 
def log(func):
  @functools.wraps(func)
  def wrapper(*args, **kw):
    print 'call %s():' % func.__name__
    return func(*args, **kw)
  return wrapper
 
#對于帶參函數(shù)
 
import functools
 
def log(text):
  def decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
      print '%s %s():' % (text, func.__name__)
      return func(*args, **kw)
    return wrapper
  return decorator
偏函數(shù)(固定函數(shù)默認值)
 
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
 
#相當于:
 
def int2(x, base=2):
  return int(x, base)
 
max2 = functools.partial(max, 10)

相當于為max函數(shù)指定了第一個參數(shù)
 

max2(5, 6, 7)
 
#相當于:
 
max(10, 5, 6, 7)

相關文章

  • Django Model層F,Q對象和聚合函數(shù)原理解析

    Django Model層F,Q對象和聚合函數(shù)原理解析

    這篇文章主要介紹了Django Model層F,Q對象和聚合函數(shù)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Python使用for生成列表實現(xiàn)過程解析

    Python使用for生成列表實現(xiàn)過程解析

    這篇文章主要介紹了Python使用for生成列表實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 對Python 兩大環(huán)境管理神器 pyenv 和 virtualenv詳解

    對Python 兩大環(huán)境管理神器 pyenv 和 virtualenv詳解

    今天小編就為大家分享一篇對Python 兩大環(huán)境管理神器 pyenv 和 virtualenv詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 安裝pyhttpx解決ImportError: DLL load failed錯誤

    安裝pyhttpx解決ImportError: DLL load failed錯誤

    這篇文章主要為大家介紹了安裝pyhttpx解決ImportError: DLL load failed錯誤,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 超詳細注釋之OpenCV dlib實現(xiàn)人臉采集

    超詳細注釋之OpenCV dlib實現(xiàn)人臉采集

    這篇文章主要介紹了OpenCV dlib實現(xiàn)人臉采集,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • python查詢mysql,返回json的實例

    python查詢mysql,返回json的實例

    下面小編就為大家分享一篇python查詢mysql,返回json的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • python使用pygame框架實現(xiàn)推箱子游戲

    python使用pygame框架實現(xiàn)推箱子游戲

    這篇文章主要為大家詳細介紹了python使用pygame框架實現(xiàn)推箱子游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 使用matplotlib的pyplot模塊繪圖的實現(xiàn)示例

    使用matplotlib的pyplot模塊繪圖的實現(xiàn)示例

    這篇文章主要介紹了使用matplotlib的pyplot模塊繪圖的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Python drop方法刪除列之inplace參數(shù)實例

    Python drop方法刪除列之inplace參數(shù)實例

    這篇文章主要介紹了Python drop方法刪除列之inplace參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python實現(xiàn)自動玩貪吃蛇程序

    Python實現(xiàn)自動玩貪吃蛇程序

    這篇文章主要介紹了通過Python實現(xiàn)的簡易的自動玩貪吃蛇游戲的小程序,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學一學
    2022-01-01

最新評論

陆良县| 尉氏县| 腾冲县| 蒙城县| 辽源市| 巩留县| 松阳县| 华亭县| 白玉县| 资阳市| 沁水县| 昌图县| 华容县| 锡林郭勒盟| 家居| 三原县| 丰顺县| 潼关县| 深泽县| 荆门市| 唐海县| 慈溪市| 资兴市| 瓮安县| 文安县| 洛宁县| 饶河县| 开原市| 新乐市| 阿合奇县| 黎平县| 芒康县| 华坪县| 田林县| 襄城县| 阿勒泰市| 桐梓县| 项城市| 邢台市| 萍乡市| 通渭县|