python(函数封装)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
python(函数封装)
⼀:Python ⾃定义函数
函数⽰意图如下:
1、使⽤函数的好处
代码重⽤
保持⼀致性,易维护
可扩展性
2、函数定义
函数定义的简单规则
函数代码块以def关键词开头
后接函数标识符名称和圆括号(),名称不能⽤纯数字或值python保留字符定义
任何传⼊参数和⾃变量必须放在圆括号中间函数内容以冒号起始,并且缩进若有返回值
函数通常使⽤三个单引号 '''...''' 来注释说明函数;函数体内容不可为空,可⽤ pass 来表⽰空语句
语法如下
函数名称定义的要求
不要以纯数字命名
不要以python中保留字符(关键字)来命名
不要以⽂件名命名
不能出现特殊字符
要简短且见名知义
def函数名():
函数体
3、return 返回语句
每个函数都有⼀个 return 返回值,如果没定义则返回 None
函数中只要执⾏到 return 语句,函数就⾃动结束
可以写多个 return 语句但是第⼆个及之后的 return 语句不会被执⾏
可以通过 return x,y,z 形式返回多个值
def num(a,b):
c = int(a) + int(b)
return a,b,c
4、参数:
形参:写在函数声明的位置的变量量叫形参
实参:在函数调⽤的时候给函数传递的值. 叫实参
实参可以是常量、变量、表达式、函数等,⽆论实参是何种类型的量,在进⾏函数调⽤时,它们都必须有确定的值,以便把这些值传送给形参。
因此应预先⽤赋值,输⼊等办法使参数获得确定值.
传参:给函数传递信息的时候将实际参数交给形式参数的过程被称为传参
5、参数的分类
位置参数
def print_info(name,school): # 定义形参
print("My name is %s" % name)
print("I learning software testing in %s" % school)
print_info("XiaoWang","ShenZhen Dcs") # 传⼊实参
# 结果如下
My name is XiaoWang
I learning software testing in ShenZhen Dcs
def add(a,b): #括号内为形参
return a+b
print (add(2,3)) #括号内为实参
def jian(a,b):
return a-b
def cheng(a,b):
return a*b
def chu(a,b):
return a/b
#求出给定区间的偶数和
def sums(x,y):
a = []
for i in range(x,y+1):
if i % 2 == 0:
a.append(i)
return(sum(a))
⽰例如下
#统计出字符串中某个字母有多少个
def counts(s,x):
print (s.count(x))
#分数评级⽅法,90分以上:A,70分以上:B,60分以上:C,其他:D
def PG(score):
if score > 90:
return("A")
elif score > 70:
return("B")
elif score > 60:
return("C")
else:
return("D")
#封装⼀个功能,实现统计⽂件内容⾏数
def count_line(filepath):
with open(filepath,"r") as data:
return(len(data.readlines()))
#coding=utf-8
"""
封装登录和注册⽅法进⾏登录注册要求如下:
先定义⼀个字典来存放⽤户名,账号和密码如dic = {'admin': '123456', 'xfs': '234567'}
要求如下:
1、从字典中获取⽤户完成登⼊,登⼊时判断⽤户是否存在,存在直接登⼊
2、如果输⼊的登⼊⽤户判断不存在字典,则调⽤注册⽅法,完成该⽤户的注册,注册成功后写⼊字典"""
dic = {'admin':'123456','xfs':'234567'}
def register():
user = input("输⼊账号:")
A = True
while A:
pwd = input("输⼊密码:")
repwd = input("请确认密码:")
if repwd == pwd:
dic.setdefault(user,pwd)
A = False
else:
print ("两次密码不⼀致!")
def login():
user = input("请输⼊账号:")
if user in dic.keys():
for i in range(3):
pwd = input("请输⼊密码:")
if pwd == dic.get(user):
print ("登录成功")
break
else:
print ("密码错误")
else:
print ("账号不存在,请注册!")
login()
#coding=utf-8
#封装⼀个⽅法,实现⼈民币和美元汇率转换
def Change(a):
if a[:3] == "¥":
return("%.4f" % (float(a[3:])/6.78))
elif a[:1] == "$":
return ("%.4f" % (float(a[1:])*6.78))
else:
return"输⼊有误!"
默认参数
默认形参必须接在位置参数后
def print_info(name = "XiaoZhen",school = "ShangHai Dcs"):
print("My name is %s" % name)
print("I learning software testing in %s" % school)
print_info() # 未传实参
print_info("XiaoWang","ShenZhen Dcs") # 重新传了实参
# 结果如下
My name is XiaoZhen
I learning software testing in ShangHai Dcs
My name is XiaoWang
I learning software testing in ShenZhen Dcs
def print_info(name,school = "GuangZhou Dcs"):
print("My name is %s" % name)
print("I learning software testing in %s" % school)
print_info("XiaoWang","ShenZhen Dcs")
#结果如下
My name is XiaoWang
I learning software testing in ShenZhen Dcs
# 默认参数在位置参数前
def print_info(name = "XiaoZheng",school): # 此时默认参数在位置参数前,代码会提⽰报错print("My name is %s" % name)
print("I learning software testing in %s" % school)
可变长参数
建议可变长参数放在默认参数后
def abc(x,*y):
return x,y
abc(1,2)
abc(1,2,3,4,5,6)
def abc(*args):
for i in args:
print(i)
print(args) #args 中存储了(1, 2, 3, 4, 5)
print(*args) #输出的时候加上 * 可以去除()
abc(1,2,3,4,5)
#结果如下
1
2
3
4
5
(1, 2, 3, 4, 5)
1 2 3 4 5
# 将可变长参数放在默认参数前
def print_info(name,*args,age = 24,**kwargs):
print("My name is %s" % name)
print("My teachers are %s" % (str(args)))
print("My age is %s" % age)
print("I learning software testing in %s" % (kwargs.get("School")))
print_info("XiaoZheng","Qian Sir","Chen Sir","Zheng Sir",27,School="ShenZhen Dcs")
My name is XiaoZheng
My teachers are ('Qian Sir', 'Chen Sir', 'Zheng Sir', 27) # 解释器将我传给 age 的实参 27 也当作 args 的参数了
My age is 24 # 我在调⽤函数时传给 age 的实参未⽣效
I learning software testing in ShenZhen Dcs
关键字参数
def print_info(name,school):
print("My name is %s" % name)
print("I learning software testing in %s" % school)
print_info(school="ShangHai Dcs",name="XiaoZheng") # 第⼀种传参⽅式
print_info(**{"name":"XiaoWang","school":"ShenZhen Dcs"}) # 第⼆种传参⽅式
info = {"name":"XiaoQian","school":"GuangZhou Dcs"}
print_info(**info) # 第三种传参⽅式
# 结果如下
My name is XiaoZheng
I learning software testing in ShangHai Dcs
My name is XiaoWang
I learning software testing in ShenZhen Dcs
My name is XiaoQian
I learning software testing in GuangZhou Dcs
def abc(x,**kwargs):
return x,kwargs
#传参⽅式如下
stu = {"name":"zhangsan","age":20}
print (abc(1,**stu))
print (abc(1,name="zhangsan",age=20))
print (abc(1,**{"name":"zhangsan","age":20}))
# 关键字参数放在可变长参数后
def print_info(name,age = 24,*args,**kwargs):
print("My name is %s" % name) # 位置参数
print("My age is %s" % age) # 默认参数
print("My teachers are %s" % (str(args))) # 可变长参数
print("I learning software testing in %s" % (kwargs.get("School"))) # 关键字参数
print_info("XiaoZheng",27,"Qian Sir","Chen Sir","Zheng Sir",School="ShenZhen Dcs")
# 结果如下
My name is XiaoZheng
My age is 27
My teachers are ('Qian Sir', 'Chen Sir', 'Zheng Sir')
I learning software testing in ShenZhen Dcs
# 关键字参数放在可变长参数前
def print_info(name,age = 24,**kwargs,*args): # 代码会提⽰报错
print("My name is %s" % name)
print("My age is %s" % age)
print("My teachers are %s" % (str(args)))
print("I learning software testing in %s" % (kwargs.get("School")))
6、作⽤域(局部变量和全局变量)
局部变量是在函数内部定义的变量,只能在函数内部使⽤,函数执⾏结束后,函数内部的局部变量,会被系统回收不同的函数,不同函数可以定义相同的名字的局部变量,但是各⽤各的不会产⽣影响
全局变量是在函数外部定义的变量,(没有定义在某⼀个函数内),所有函数内部都可以使⽤这个变量。