* 自定义函数*
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