Python函数

一、函数

函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字

可以通过函数名在程序的不同的地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句

自定义函数和预定义函数

函数作用:降低编程的难度、代码重用

当我们自己定义一个函数时,通常使用def语句

def 函数名(参数列表): #可以没有参数

函数体

#!/usr/bin/python

a = int(raw_input("please enter a number:"))

b = int(raw_input("please enter other number:"))

def fun():

    c = a + b

    print c

fun()

形式参数、实际参数、默认参数

  ---在定义函数时函数名后面圆括号中的变量名称叫做“形式参数”

  ---在调用函数时函数名后面圆括号中的变量名称叫做“实际参数”

#!/usr/bin/python

#!coding:utf8

def fun(a,b):      #形参

    c = a + b

    print ("%d+%d=%d") % (a,b,c)

a = int(raw_input("请输入a整数:"))

b = int(raw_input("请输入b整数:"))

fun(a,b)        #实参

#!/usr/bin/python

#!coding:utf8

def fun(a,b=2):   #默认(同时赋参或这右边参数赋值)

    c = a + b

    print ("%d+%d=%d") % (a,b,c)

a = int(raw_input("请输入a整数:"))

fun(a)

二、变量作用域

局部变量、全局变量

#!/usr/bin/python

x = 10   #全局变量

def fun():

    x = 2   #局部变量

    print x

fun()

print x

将局部变量变为全局变量(global)

#!/usr/bin/python

x = 10

def fun():

    x = 2

    global y

    y = 111

    print x

fun()

print x

print y

三、函数返回值(return)

>>> def f(x,y):

...     if x>y:

...         return -1

...     if x<y:

...         return 1

...     return 0

...

>>> f(1,2)

1

>>> f(1,1)

0

>>> f(2,1)

-1

冗余参数处理(*接收元组参数,**接收字典参数)

def f(x,*args,**kwargs):

    print x

print args

print kwargs

>>> f(1,2,3,4,5,6,y=20,z=30)

1

(2, 3, 4, 5, 6)

{'y': 20, 'z': 30}

四、匿名函数:lambda

   ---lambda函数是一种快速定义单行的最小函数

>>> def f(x,y):

...     return x*y

...

>>> f(2,3)

6

>>> g = lambda x,y:x*y  (冒号前面是参数,冒号后是返回值)

>>> g(2,3)

6

五、分支结构

switch语句用于编写多分支结构的程序,类似与if...elif...else语句

switch语句表达的分支结构比if...elif...else语句表达的更清晰,代码的可读性更高

但是python并没有提供switch语句

Pyhon可以通过字典实现switch语句的功能

#!/usr/bin/python

#coding:utf-8

from __future__ import division

def a(x,y):

    return x+y

def b(x,y):

    return x-y

def c(x,y):

    return x*y

def d(x,y):

    return x/y

def operator(x,o,y):

    if o == "+":

        print a(x,y)

    if o == "-":

        print b(x,y)

    if o == "*":

        print c(x,y)

    if o == "/":

        print d(x,y)

print operator(3,"+",1)

用分支结构可以写成(省去if判断)

#!/usr/bin/python

#coding:utf-8

from __future__ import division

def a(x,y):

    return x+y

def b(x,y):

    return x-y

def c(x,y):

    return x*y

def d(x,y):

    return x/y

sw = {"+":a,"-":b,"*":c,"/":d}

def f(x,o,y):

    print sw[o](x,y)

f(3,"+",2)

六、常用内置函数(举例几个)

len()     #计算元素个数

>>> s = "hello"

>>> len(s)

5

divmod()  #计算两个数的模,输出商、模

>>> divmod(5,2)

(2, 1)

pow()    #计算一个数的幂或模

>>> pow(2,3)

8

>>> pow(2,3,2)  #2的3次方除2的模

0

round()  #返回浮点数

>>> round(2)

2.0

min()  #取最小值

max()  #取最大值

>>> min(1,2)

1

>>> max(1,2,100,99)

100

callable()  #检测函数是否可以调用 True可以调用

>>> callable(min)

True

type()  #判断类型

>>> type(1)

<type 'int'>

cmp()  #比较两个字符串,相同返回0,不相同返回-1

>>> cmp(1,2)

-1

>>> cmp(1,1)

0

range() #生产一个序列

    >>> range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

xrange()

类型转换

int()   # 整型

float() # 浮点型

str()   # 字符型

list()  # 列表

tuple() # 元组

hex()   # 返回一个整数的十六进制表示或长整数。

oct()   # 返回一个整数的八进制表示或长整数。

chr()   # 返回一个字符串的一个字符顺序 i; 0 <= i < 256

ord()   # 返回一个字符的整数序列字符串

七、与类型相关的内置函数

字符串处理函数

 str.capitalize()  #控制字符串开头大写

>>> s = "hello world"

>>> s.capitalize()

'Hello world'

 str.replace()     #替换字符

>>> s.replace("hello",'good')

'good world'

 

 str.split()       #切割字符

>>> ip = "192.168.21.1"

>>> ip.split('.')

['192', '168', '21', '1']

>>> ip.split('.')[1]

'168'

>>> ip.split('.',1)  #1表示切割次数

['192', '168.21.1']

序列处理函数

 len()

 max()

 min()

 filter()   #过滤

>>> l  = range(10)

>>> def f(x):

...     if x>5:

...         return True

...

>>> filter(f,l)

[6, 7, 8, 9]

 zip()     #递进遍历

>>> t = ['loyu','love','like']

>>> t2 = ['20','30','40']

>>> zip(t,t2)

[('loyu', '20'), ('love', '30'), ('like', '40')]

 map()     #递进遍历

>>> t = ['loyu','love','like']

>>> t2 = ['20','30','40']

>>> zip(t,t2)

[('loyu', '20'), ('love', '30'), ('like', '40')]

>>> t3 = ['1','2']

>>> zip(t,t2,t3)

[('loyu', '20', '1'), ('love', '30', '2')]

>>> map(None,t,t2,t3)  #None可以是函数

[('loyu', '20', '1'), ('love', '30', '2'), ('like', '40', None)]

 reduce()  #阶乘

>>> l = range(1,101)

>>> reduce(lambda x,y:x+y,l)

5050