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