函数:封装功能!代码重用性
自定义函数
内置函数
一. 自定义
步骤
1.def关键字+函数名。
2.()参数:提供数据。
3.函数体:逻辑计算。只有当调用时才会执行。
4.返回值:当函数执行完毕后,给调用者返回数据。判断功能执行成功与否,默认为None。
返回值
1.查看执行流程:断点之后用Debug运行。
python中从上到下解释。先定义再执行。
2.返回值判断异常解析
def f1():
try:
#函数体
except:
return False#异常
else:
return True #正常
ret=f1()
print(ret)
if ret==False:
print()
else:
print()
#**当执行到返回值时函数执行过程立即终止**
def f2():
print(1)
return(0)
print(2)
ret=f2()
f2()
print(ret)
参数:函数中的不同值
基本参数
1.普通参数:可接受多个参数,且默认顺序赋值。
def car(xx): #形参:
#函数体
ret=car(blue)#实参 blue=xx
2.指定参数:形参实参位置变换
def discribe_cat(yy,zz):
print(yy,zz)
return True
discribe_cat(zz="white",yy="miky" )
3.默认参数:必须放在形参后边
def discribe_car(yy,zz="blue"):
print (yy,zz)
return True
动态参数:接受任意个实参
1.*:将传入的所有参数(任意类型,个数)作元素添加到元组中。(按照顺序)
def f3(*args):
print(args,type(args))
f3(1,2,3,'apple','banbana')
list=[1,2,3,]
f3(list,6)#将列表作为一个元素传入元组
f3(*list,6) #将列表中的每一个元素都作为元组元素
str='ymmk'
f3(*str)#将字符串的每一个元素作为元组元素
#*可以看作是一个for循环
2.**:将传入的所有参数(任意类型,个数)当作元素添加到字典中。(可改变顺序)
ef f4(**kwargs):
print(kwaegs,type(kwargs))
f4(k1="name",v1="ymmk") #将k1与v1组成的键值对放入动态参数中
dic={'k1':'v1','k2':'v2'}
f4(k3=dic) #键值对放入字典。此时字典中只有一个元素
f4(**dic) #将dic中每一个元素都放入动态参数中
特殊参数:自动封装元组和字典
def f5(*args,**kwargs):
print(args)
print(kwargs)
f5(1,2,3,4,k1='vl',k2='v2')
*在前面 **在后面
字符串的格式化输出
#str.format()
message='hello {0},i am {1}'
message2='hello {0},i am {1}'.format(*['ymmk','nike'])
message3='hello {name},i am {age}'.format(name='ymmk',age=19)#直接传入可换顺序的键值对
dic={"name":'ymmk',"age":19}
message4='hello {name},i am {age}'.format(**dic)#传入字典
print(message)
print(message2)
print(message3)
print(message4)
探究函数的参数进行传递时传什么?
def f7(yy):
yy.append(1)
list=[1,2,3,4] #list先指向[1,2,3,4]
f7(list) #list指向yy.append
print(list)
如果传递参数是复制原值并重新创建值的话,那么输出结果为[1,2,3,4,]
如果传递参数时传递的是引用,那么输出结果为[1,2,3,4,1]
变量
1.局部变量:只有本函数内部可用
def f8():
name='ymmk'
print(name)
f8()
def f9():
print(name)
f9()
全局变量:所有得函数作用域都可读。
NAME='ymmk'
def f10():
print(NAME)
f10()
def f11():
global NAME #name已经是全局变量,对全局变量经行重新赋值
NAME='abcd'
print(NAME)
f11()
当list.dec.作为全局变量时,可以添加或删减元素,但是不能重新赋值。
二.用自定义函数实现用户登录与注册系统
#coding=gbk
def login(username,password):
"""
用户登录
:param username: 用户名
:param password: 密码
:return: Ture:表示登陆成功;False:登陆失败
"""
f=open("userid",'r')
for line in f: #一行一行的读取数据
list=line.split("|")
if list[0]==username and list[1]==password:
return True
return False #如果一行错误整个登陆系统退出
def register(username,password):
"""
用户注册
:param username:用户名
:param password: 密码
:return: None
'''
"""
f=open("userid",'a') #打开可写文件
temp="\n"+username+"|"+password #注册用户名和密码
f.write(temp) #写入文件
f.close()#关闭文件
def main():
i=input("0:Log in ; 1:sign up")
if i=='0':
user=input("用户名")
pwd=input("密码")
r=login(user,pwd)
if r:
print('登陆成功')
else:
print('登陆失败')
elif i=='1':
user = input("用户名")
pwd = input("密码")
register(user,pwd)
main()
三. 用内置函数实现随机验证码组件
import random
list=[] #创建一个新列表
for i in range(4):
r=random.randrange(0,5) #另2位置随机出现在4次循环
if r==2:
num=random.randrange(0,10) #出现0-9内的随机数
list.append(str(num))
else:
temp = random.randrange(65, 91)
x=chr(temp) #随机转换ASCII码
list.append(x)
result="".join(list) #链接列表
print(result)
内置函数chr()ASCII码对应表的关系转换