python03——函数基础
1.1函数基础
函数定义:
def 函数名():
代码块
函数的调用:
函数名()
def print_info(): print("hello") pass print_info()
1.2函数参数
def 函数名(参数列表):
def print_info(name,age,hight) print('%s年龄是%d岁'%(name,age)) print('%s体重是%dkg'%(name,hight)) print_info(yangh,12,33)
参数分类:
必选参数(也叫位置参数)——调用时,必须给实参
def sum(a, b): #形式参数:不占内存地址 sum = a + b print(sum) sum(20,15) #实际参数:占用内存地址的 sum() ##不能这么写,因为没有给a、b传值
默认参数(默认参数,必须放在参数列表的最后)
def sum(a=10,b=20) print(a+b) sum() #可以不赋值,会使用默认值 sum(1) sum(1,2)
def sum(b,a=2): def sum(a=2,b): ###错
可变参数(当参数个数不确定时使用,比较灵活) *
def getComputer(*args): result=0 for item in args: result+=item print(result) pass getComputer(1) getComputer(1,2,3)
关键字参数(可变的) ** 字典类型,key值必须是字符串
def keyFunc(**kwargs): print(kwargs) dicta={''name":'yh',"age":18} keyFunc(**dicta) keyFunc(name='lh',age=26)
组合使用:(可选参数得放在关键字参数之前)
def complexF(*args,**kwargs): ##(**kwarg,*args)会报错 print(args) print(kwargs) complexF() #不会报错 complexF(1,2,3,4,name='lh') #会自动识别自动填充
1.3.函数返回值
return后的代码不会被执行
def sum(a,b): sum=a+b return sum
print(sum(10,20)) ##会返回到调用的地方
def calc(num): r=0 i=1 while i<=num: r+=i i+=1 return r v=calc(10) print(v)
li=[] return li ###返回列表 return 1,2,3 ##返回元组 return {"name":"yh"} ##返回字典
1.4.函数的嵌套调用
在函数里调用其他函数
def fun1(): print("start1") print("……………………") print("end1") pass def fun2(): print("start2") fun1() print("end2") pass fun2()
巩固:
1.写函数,接收n个数字,求这些参数数字的和
2.写函数,找出传入的列表或元组的奇数位对应的元素,井返回-个新的列表
3.写函数,检查传入字典的每一个value的长度如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。PS 字典中的value只能是字符串或列表
2.1函数的分类:
无参数无返回值的
def mvprint(): print("-" *20)
无参数有返回值的
def mycpu(): return info
有参数无返回值的
def set(a) pass
有参数有返回值的
def cal(a,b) c=a+b
2.2局部变量与全局变量
局部变量——在函数中定义的变量,仅作用于函数内部
全局变量—— 全局变量与局部变量重复定义时,函数里优先局部变量
如果函数内部要对全局变量进行修改的话,使用global关键字
global name name='yh'
2.3引用
万物皆对象,在函数的调用时,实参传递的是对象的引用。
a=1 ###不可变类型 def func(x) print(id(x)) #x的内存地址 x=2 print(id(x)) #x的内存地址发生变化 print(x) ##x为2 print(id(a)) # func(a) #a与开始的x是一个地址 print(a) #a为1
##可变类型 li=[] def testRenc(p): print(id(p)) li.append([1,2,3]) print(p) ###内部的数据与外部一直 print(id(li)) testRenc(li)li print(li) ###外部的
2.4匿名函数
lambda 参数1,参数2,参数3: 执行代码语句
缺点——只能是单个表达式,不能是一个代码块。
##普通函数 def test(x,y): return x+y test(1,2) ###匿名函数,自带return test=lambda x,y:x+y test(1,2)
lambda与三元计算
if a: b else: c ##等效为 b if a else c ###在lambda中 greater=(lambda x,y:x if x>y else y) print(greater(3,5)) ##也可以直接 greater=(lambda x,y:x if x>y else y)(3,5) print(greater)
2.5递归函数
如果在一个函数内部不调用其他的函数,而是自己本身,必须设定结束的条件,不然会一直执行下去
###求阶乘 def fac(n): if n==1: return 1
else: return n*fac(n-1)
import os ##文件操作模块 def findFile(file_Path): listRs=os.listdir(file_Path) ##得到该路径下所有文件夹 for fileitem in listRs: full_path=os.path.join(file_Path,fileitem) ###获取完整的文件路径 if os.path.isdir(full_path): ##判断是否是文件夹 findFile(full_path) #如果是一个文件夹,再次去递归 else: print(fileitem) pass pass else: return pass ##调用搜索文件对象 findFile('D:/software')