Python学习(四)——函数

* 自定义函数*

1、创建函数

使用def语句创建函数,形式为:函数名(参数1,参数2,…):,然后在缩进快中编写函数体,返回用return。没有return语句时,自动return None。
返回值为一个tuple。

>>> def m_cmp(a,b):
    if a>b:
        return '%d > %d'%(a,b)
    else:
        return '%d < %d'%(a,b)


>>> m_cmp(12,34)
'12 < 34'

‘多个’返回值时:

>>> def m_f(a,b):
    x=a*a+b*b
    y=a*a-b*b
    z=a+b
    return x,y,z

>>> r1,r2,r3=m_f(12,15)
>>> r1
369
>>> r2
-81
>>> r3
27

空函数,可用pass语句:

>>> def none():
    pass

2、默认参数

必选的参数在前,默认的参数在后
要给函数提供一个默认值可用:
def conn(name,age=20):
默认参数一定要用不可变对象

def factor(n,a=1):
    r=1
    while n>0:
        r=r*n
        n=n-1
    return a*r
print factor(5)
print factor(5,3)

输出:

120
360

当不按顺序提供部分默认参数时,需要把参数名写上。

def student(name,age=20,gender='M',address='Makongduo'):
    print 'name',name
    print 'age',age
    print 'gender',gender
    print 'address',address
student('Ann',22,'F')
student(name='Bob',address='HongKong')

输出:

name Ann
age 22
gender F
address Makongduo
name Bob
age 20
gender M
address HongKong

3、可变参数

接收一个list或tuple。
即当输入参数个数不确定时,可以把参数作为一个list或tuple传入:

def fun(args):
    sum=0
    for n in args:
        sum=sum+n*n
    return sum

调用时装入一个list或tuple:

print fun([1,5,9])
print fun((3,5,7))

输出:

107
83

在参数前面加一个*号,把函数参数改为可变参数:

def fun(*args):
    sum=0
    for n in args:
        sum=sum+n*n
    return sum

函数调用方式可简化为:

print fun(1,5,9)
print fun(3,5,7)

输出

107
83

对已有的list或tuple:
num=(1,3,6,9)可直接写fun(*num)。

4、关键字参数

接收一个dict。
关键字参数允许输入0个或多个含参数名的参数,在函数内封装为一个dict。

def student(name,gender,age,**kw):
    print 'name',name,'gender',gender,'age',age,'kw',kw

输入:

student('Tom','M',20,address='Kashi',Job='teacher',hight=175)

可得:

name Tom gender M age 20 kw{'Job': 'teacher', 'hight': 175, 'address': 'Kashi'}

或者输入:

kw={'Job': 'teacher', 'hight': 175, 'address': 'Kashi'}

可得:

name Tom gender M age 20 kw{'Job': 'teacher', 'hight': 175, 'address': 'Kashi'}

5、参数组合

Python中参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数

6、高阶函数

在Python中函数名也是变量,变量可以指向函数,如:
这里f指向比较函数cmp(),则可以通过变量f调用cmp()函数;

>>> f=cmp
>>> f
<built-in function cmp>
>>> f(12,5)
1
>>> cmp(12,5)
1

因此可以通过函数参数指向另一个函数,实现函数传入,即为高阶函数:
如:

>>> def add(a,b,f):
    return f(a)+f(b)

>>> add(12,-8,abs)
20

变量f接收函数abs作为参数。
函数可以像参数一样传递给另外一个函数:

def fun1(a):
    return a**2

def fun2(f, b):
    print fun1(b)

fun2(fun1,5)

输出:

25

如斐波那契数列 Fibonacci sequence 生成:

def f(n):
    if n == 0 or n == 1:
        return n
    else:
        return (f(n-1) + f(n-2))

def fib(n):
    for i in range(n):
        print f(i)

fib(20)

生成:

0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181

7 返回函数

函数作为返回值。
当调用s_sum()函数时,返回的是求和函数(每次都会返回一个新函数),调用f()时才真正计算求和结果:

>>> def s_sum(*args):
    def sum():
        s=0
        for n in args:
            s=s+n
        return s
    return sum

>>> f=s_sum(1,2,3,4,5,6)
>>> f
<function sum at 0x0000000002B5ECF8>
>>> f()
21

8 匿名函数 lambda

lambda函数的形式为:

f = lambda a, b : a**b
print f(2, 8)

输出:

256

Python内置常用函数

查看内置变量和内置函数:

>>> dir(__builtins__)

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 
'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented', 
'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 
'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__debug__', '__doc__', 
'__import__', '__name__', '__package__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 
'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 
'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 
'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']

1、数据类型转换函数

>>> int(12.3)
12
>>> float(12)
12.0
>>> str(12.3)
'12.3'
>>> bool(123)
True
>>> bool('')
False
>>> bool([])
False
>>> unicode(12.3)
u'12.3'

2、其他
1)绝对值 abs()

>>> abs(-12.3)
12.300000000000001
>>> abs(12.3)
12.300000000000001
>>> abs(123)
123
>>> abs(-123)

2)比较 cmp()
cmp(a,b) 若a=b返回0,a>b返回1,a

>>> cmp(12,3)
1
>>> cmp(3,12)
-1
>>> cmp(3,3)
0

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值