Python(三)–函数
函数
- 无参函数:
def 函数名称():
代码块
return [表达式]
以关键词def开始,后面跟函数名和小括号,以冒号开头并缩进,最后使用return退出函数,有表达式则传递返回值,没有则返回None.
无参函数的调用语法: [变量] = 函数名称()
使用复制运算符”=”可以获得函数的返回值,使用时必须先定义再调用,否则程序出现错误.
实例九九乘法表:
def nineMultiTab():
for i in range(1,9):
for j in range(1,9):
print i,"*",j,"=",i*j
return
nineMultiTab()
一个简易的登录系统:
kg = {}
def newUser(): #注册
user = raw_input("Please input user:")
while True:
if(kg.has_key(user)):
print "name taken,try again"
else:
break
password =raw_input("Please input password:")
kg[user] = password
def oldUser():#登录
user = raw_input("Login username:")
if(kg.has_key(user)):
password = raw_input("password:")
if (password == kg.get(user)):
print "--welcome back--", user
else:
print "--password error--"
else:
print "invalid user"
def showMenu(): #定义菜单
prompt = '''
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:
'''
while True:
choice = raw_input(prompt).strip()[0].lower()
print "\n--You picked:[%s]" % choice
if choice not in "neq":
print "--invalid option ,try again--"
else:
if choice == "n":
newUser()
elif choice == 'e':
oldUser()
else:
print "quit"
break
showMenu()
- 代参函数:
def 函数名称 (形式参数列表):
代码块
return [表达式]
示例:
def aa(x,y):
return x,y
print aa(1, 3)
print aa(y=10,x = 9)
当程序比较繁琐时,参数的顺很难记住,可以使用关键字参数.
还可以定义默认参数:
def aa(x,y = 4):
return x,y
print aa(3)
注意:定义关键字参数默认值时需要注意,位置参数必须出现在默认参数之前.
错误例子:
def bb(x = 1,y):
print x,y
一个简单的计算器:
def calculate(data1,data2,op):
if op not in "+-*/":
return "operator error"
else:
if op == "+":
return convert(data1)+convert(data2)
elif op == "-":
return convert(data1)-convert(data2)
elif op == "*":
return convert(data1)*convert(data2)
else:
if(data2 != 0):
return convert(data1)/convert(data2)
else:
return "divisior can not be 0!"
def convert(data):
flag = True
for ch in data:
if ch not in "123456790":
flag = False
break
if flag:
return int(data)
else:
return "data = "+data+" is invalid "
def inputExpress():
while True:
print "(Q)uit"
data1 = raw_input("input data1:")
if data1.strip()[0].lower() == "q":
break
operator = raw_input("input operator:")
data2 = raw_input("input data2:")
if data2.strip()[0].lower() == "q":
break
print calculate(data1, data2, operator)
inputExpress()
- 变量作用域
变量声明的位置决定它的作用域,python按作用域区分为局部变量和全局变量.
全局变量: 指在一个模块中最高级别的变量有全局作用域,除非被删除,否则存活到程序运行结束,所有函数都能访问全局变量.
局部变量: 指定义在函数内部的变量有局部作用域,依赖于定义变量的函数现阶段是否处于活动状态,调用函数时,局部变量产生,暂时存在.一旦函数执行完,局部变量将会被释放.
注意: 在同一个函数中,不允许有同名局部变量.在不同的函数中,可以有同名局部变量.在同一个程序中,全局变量和局部变量同名时,局部变量具有更高的优先级.
特别的: 若想在函数内定义全局变量,可以用global关键字解决,global声明的变量是全局变量. - lambda函数:
lambda函数的作用是创建匿名函数.
lambda 参数列表:函数返回值的表达式
示例:
def sum1(x,y):
return x+y
sum2 = lambda x,y:x+y
print sum1(1,2)
print sum2(1,2)
注意:使用lambda只能是表达式,不能包含if,for等条件循环语句,对于不需要服用的简单匿名函数,使用lambda能起到很好的效果.
- 内联函数
内联函数是程序员经常使用到的方法,曾加程序编写的效率,如float()就是内联函数.内联函数是自动加载的,python的解释器可以识别.它不需要导入模块,不必做任何的操作.,不需要引用就可以调用.
- abs(x) 能够返回一个数字的绝对值.
- bool([x]) 参数为数字时,0返回False,其他返回True.参数为字符串数时,None或空字符串反水False,否则返回True.参数为空的列表,元组或字典时,返回False,否则返回True.
- float([x]) 用于转换数据为float类型.参数可以为字符串或数字.
- int([x,[base]) 第一个参数为转换的数据,第二个参数为进制.默认为十进制.如果采纳数含有浮点数的字符串,将会产生语法错误.
- range([start],stop[,step]) 可以产生一个列表.第一个参数start表示起始值,是可选参数,默认值为0.第二个参数stop表示终止值,第三个参数表示步长,是可选参数,可以为正数或负数,默认值为1.
- sum(x[,start]) 可以对列表中的元素求和.第一个参数x是迭代器,第二个参数start是步长,是可选参数,默认值是1.
- max(x) 可以返回列表,元组或字符串中最大的元素.
- min(x) 可以返回列表,元组或字符串中最小的元素.
- dir([object]) 可以返回关于任何值的相关信息,可以用于任何对象(包括字符串,数字,函数,模块,对象和类).
- eval(expression[,globals[,lobals]]) 可以计算表达式的值.
print eval(“9*52+1*(1+2)”) - len(s) 返回一个对象的长度.对于字符串返回字符个数,元组列表和字典反水大慧寺元素的个数.
- exec(object[,globals[,lobals]]) 可以运行较复杂的程序,与eval()函数功能相近,二者的区别是exec()没有返回值,而eval()有返回值.
program = '''print('ww');print('ss')'''
exec(program)