zoukankan      html  css  js  c++  java
  • python中函数介绍

    斐波拉希数列

    >>> fibs
    [0, 1]
    >>> n=input('How many Fibonacci numbers do your what?')
    How many Fibonacci numbers do your what?10
    >>> for n in range(n-2):
        fibs.append(fibs[-2]+fibs[-1])
    
        
    >>> fibs
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

     注意:内建的callable函数可以用来判断函数是否可以调用

    def 定义函数

    >>> def hello(name):
        print "Hello"+name
    
        
    >>> hello('world')
    Helloworld

     用函数写斐波拉希数列

    >>> def fibs(num):
        s=[0,1]
        for i in range(num-2):
            s.append(s[-2]+s[-1])
    
            
    >>> fibs(10)

     注意:return语句从函数中返回值

    函数说明:如果给函数写文档,让其他人能理解的话,可以加入注释(#开头)。另外一种方法就是直接写上字符串。

    >>> def square(x):
        'Calculates the square of the number x.'
        return x*x
    
    >>> square.__doc__
    'Calculates the square of the number x.'

    内建的help函数,可以得到关于函数,包括它的文档字符串信息

    >>> help(square)
    Help on function square in module __main__:
    
    square(x)
        Calculates the square of the number x.

     在函数内为参数赋予新值不会改变外部变量的值:

    >>> def try_to_change(n):
        n='Mr,Gumby'
    
        
    >>> name='Mrs,Entity'
    >>> try_to_change(name)
    >>> name
    'Mrs,Entity'

     字符串(以及数字和元组)是不可改变的,即无法修改。若将可改变的数据结构(列表或字典)修改,参数会被修改

    >>> n=['Bob','Alen']
    >>> def change(m):
        m[0]='Sandy'
    
        
    >>> change(n[:])
    >>> n
    ['Bob', 'Alen']
    >>> change(n)
    >>> n
    ['Sandy', 'Alen']

     关键字参数和默认值

    >>> def hello(name,greeting='Hello',punctuation='!'):
        print '%s,%s%s' % (greeting,name,punctuation)
    
        
    >>> hello(name='Nsds')
    Hello,Nsds!
    >>> hello(name='Nsds',greeting='Hi')
    Hi,Nsds!

    收集参数

    返回元组:

    >>> def print_params(*params):
        print params
    
        
    >>> print_params('Testing') #返回元组
    ('Testing',)
    >>> print_params(1,2,3)
    (1, 2, 3)
    >>> def print_params_2(title,*params):
        print title
        print params
    
        
    >>> print_params_2('Params:',1,2,3)
    Params:
    (1, 2, 3)

     返回字典

    >>> def print_params_3(**params):
        print params
    
        
    >>> print_params_3(x=1,y=2,z=3)
    {'y': 2, 'x': 1, 'z': 3}
    >>> def print_params_4(x,y,z=3,*pospar,**keypar):
        print x,y,z
        print pospar
        print keypar
    
        
    >>> print_params_4(1,2,3,5,6,7,foo=1,bar=2)
    1 2 3
    (5, 6, 7)
    {'foo': 1, 'bar': 2}
    >>> print_params_4(1,2)
    1 2 3
    ()
    {}

     调用元组、字典

    >>> def add(x,y):return x+y
    
    >>> params=(1,2)
    >>> add(*params)
    3
    >>> def with_stars(**kwds):
        print kwds['name'],'is',kwds['age'],'years old']
    >>> def without_starts(kwds):
        print kwds['name'],'is',kwds['age'],'years old'
    >>> args={'name':'Nsds','age':24}
    >>> with_stars(**args)
    Nsds is 24 years old
    >>> without_starts(args)
    Nsds is 24 years old
    >>> add(2,args['age'])
    26

     星号只在定义函数(允许使用不定数目的参数)或者调用("分割"字典或者序列)时才有用

    >>> def foo(x,y,z,m=0,n=0):
        print x,y,z,m,n
    
        
    >>> def call_foo(*args,**kwds):
        print "Calling foo!"
        foo(*args,**kwds)
    
    >>> d=(1,3,4)
    >>> f={'m':'Hi','n':'Hello'}
    >>> foo(*d,**f)
    1 3 4 Hi Hello
    >>> call_foo(*d,**f)
    Calling foo!
    1 3 4 Hi Hello

     几个例子

    >>> def story(**kwds):
        return 'Once upon a time,there was a' 
               '%(job)s called %(name)s.' % kwds
    
    >>> def power(x,y,*others):
        if others:
            print 'Received redundant parameters:',others
        return pow(x,y)
    
    >>> def interval(start,stop=None,step=1):
        if stop is None:
            start,stop=0,start  #start=0,stop=start
        result=[]
        i=start
        while i<stop:
            result.append(i)
            i+=step
        return result
    
    >>> print story(job='king',name='Gumby')
    Once upon a time,there was aking called Gumby.
    >>> print story(name='Sir Robin',job='brave knight')
    Once upon a time,there was abrave knight called Sir Robin.
    >>> params={'job':'language','name':'Python'}
    >>> print story(**params)
    Once upon a time,there was alanguage called Python.
    >>> del params['job']
    >>> print story(job='store of genius',**params)
    Once upon a time,there was astore of genius called Python.
    >>> power(2,3)
    8
    >>> power(y=3,x=2)
    8
    >>> params=(5,)*2
    >>> power(*params)
    3125
    >>> power(3,3,'Helld,world')
    Received redundant parameters: ('Helld,world',)
    27
    >>> interval(10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> interval(1,5)
    [1, 2, 3, 4]
    >>> power(*interval(3,7))
    Received redundant parameters: (5, 6)
    81

     修改全局变量

    >>> def f():
        global x
        x=x+1
    
        
    >>> f()
    >>> x
    2
    >>> f()
    >>> x
    3

    嵌套

    >>> def multiplier(factor):
        def multiplyByFactor(number):
            return number*factor
        return multiplyByFactor
    
    >>> double=multiplier(2)
    >>> double(5)
    10
    >>> multiplier(2*5)
    <function multiplyByFactor at 0x0000000002F8C6D8>
    >>> multiplier(2)(5)
    10

    递归(调用)

    阶乘和幂

    >>> def factorial(n):
        if n==1:
            return 1
        else:
            return n*factorial(n-1)
    
        
    >>> factorial(5)
    120
    >>> range(3)
    [0, 1, 2]
    >>> def power(x,n):
        result=1
        for i in range(n):
            result *= x
        return result
    
    >>> power(5,3)
    >>> def power(x,n):
        if n==0:
            return 1
        else:
            return x*power(x,n-1)
    
        
    >>> power(2,3)
    8

     二元查找

    >>> def search(s,n,min=0,max=0):
        if max==0:
            max=len(s)-1
        if min==max:
            assert n==s[max]
            return max
        else:
            middle=(min+max)/2
            if n>s[middle]:
                return search(s,n,middle+1,max)
            else:
                return search(s,n,min,middle)
    
            
    >>> search(seq,100)
    5

     map函数

    它接收一个函数和一个列表,并通过函数依次作用在list的每个元素上,得到一个新的list并返回

    >>> map(str,range(10))
    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    >>> def f(x): return x*x >>> print map(f,[1,2,3,4,5,6,7]) [1, 4, 9, 16, 25, 36, 49]
    >>> def format_name(s):
        s1=s[0].upper()+s[1:].lower()
        return s1
    
    >>> print map(format_name,['ASDF','jskk'])
    ['Asdf', 'Jskk']

     filter函数

    它接收一个函数和一个列表(list),这个函数依次对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

    >>> def is_not_empty(s):
        return s and len(s.strip())>0
    
    >>> filter(is_not_empty,[None,'dshk','  ','sd'])
    ['dshk', 'sd']
    >>> def pfg(x):
        s=math.sqrt(x)
        if s%1==0:
            return x
    
    >>> import math
    >>> pfg(100)
    100
    >>> pfg(5)
    >>> filter(pfg,range(100))
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> def is_sqr(x):
        return math.sqrt(x)%1==0
    
    >>> is_sqr(100)
    True
    >>> filter(is_sqr,range(100))
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

     lambda函数

    也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的

    >>> def foo():return 'Begin'
    
    >>> lambda:'begin'
    <function <lambda> at 0x0000000002ECC2E8>
    >>> s=lambda:'begin'
    >>> print s()
    begin
    >>> s= lambda x,y:x+y
    >>> print s(1,2)
    3
    >>> def sum(x,y=6):return x+y
    
    >>> sum2=lambda x,y=6:x+y
    >>> sum2(4)
    10
    >>> filter(lambda x:x*x,range(1,5))
    [1, 2, 3, 4]
    >>> map(lambda x:x*x,range(1,5))
    [1, 4, 9, 16]
    >>> filter(lambda x:x.isalnum(),['8ui','&j','lhg',')j'])
    ['8ui', 'lhg']

    reduce函数

    它接收一个函数和一个列表(list),函数必须接收两个参数,这个函数依次对列表每个元素进行调用,返回结果值组成的新列表

    >>> reduce(lambda x,y:x*y,range(1,5))
    24
    >>> reduce(lambda x,y:x+y,[23,9,5,6],100) #初始值为100,依次相加列表中的值
    143
  • 相关阅读:
    数组里面为对象根据某一属性排序
    理由<a>标签跳转到对应锚点
    jquery对复选框选中
    Fullcalendar
    es6学习
    vue 关于树杈图问题
    input 复选框样式修改
    GAMES101 作业2
    一份自己iOS 面试题,拿到15K35K,分享出来
    Cesium 一款面向三维地球和地图的,世界级的JavaScript开源产品
  • 原文地址:https://www.cnblogs.com/nsds/p/6477842.html
Copyright © 2011-2022 走看看