函数:
就是功能的封装体
1.函数名就是标识符 遵循标识符的命名规则 (小驼峰)
2.参数:可以写 也可以不写
参数:
1.参数的个数 可以是任意个
2.参数类型可以是任意类型,由于python是弱类型语言 所以不用指定参数类型
3.括号后边有冒号
4.函数体注意缩进
5.return 写不写都可以
如果不写return语句 默认的return None
6.调用函数
函数名([参数])
函数的分类:
1.没有参数 没有返回值
2.有参数 没有返回值
3.没有参数 有返回值
4.有参数 有返回值
在声明方法括号中的参数称为形式参数 简称形参
在调用方法时 传进的参数称为实际参数 简称实参
在参数传递的过程中 形参个数要和实参个数保持一致(可变参数除外)
流程控制语句:
1.break 用在循环中 条件成立 跳出循环体(一重循环) 没有结束当前函数
2.continue 用在循环中 条件成立 结束当次循环 继续下一次循环 也没有结束当前方法
3.return 用在循环 条件成立 跳出循环体(一重或者多重) 并且结束当前方法
参数类型:
-
可变和不可变参数
可变类型:列表 字典 set 不可变类型: int float str bool None 元组
参数是不可变类型:
如果值发生变化 互不影响
参数是可变类型:
1.如果是修改 指向没有发生变化 互相影响
2.如果是修改 指向发生变化 互不影响
例子:
#可变参数 指向没有发生变化
def f2(ls):
ls.append(30)
print(ls)
ls=[10,20,3]
f2(ls)
print(ls)
#可变参数 指向发生变化
def f3(ls2):
ls2=[4,5,7]
print(ls2)
ls2=[11,22]
f3(ls2)
print(ls2)
-
必选参数
必须参数一定要在默认参数之前
-
默认参数
如果调用函数传递参数就使用传递的参数
如果不传递参数就是用默认参数 -
可变参数
参数个数可变和不可变 -
关键字参数
#既有可变元组 又有可变字典
def fu8(*tup3,**kv):
print(tup3)
print(kv)
fu8(1,2,4,5,x="张三",age="30")
例子:
#必选参数 默认值参数 可变参数
def show(name,age,adres="中国",*tup4,**kw):
print("name=%s"%name)
print("age=%s"%age)
print("adres=%s"%adres)
print(tup4)
print(kw)
show("老王",30,1,2,3,id="3",sex="男")
递归函数
递归能完成的循环也能完成
递归的特点 代码比较少
递归的缺点 占用内存比较大 速度比较慢
一般情况下如果数据比较大的话 不建议使用递归
数据比较大的话 建议使用循环
递归函数:
函数内部再调用自己
例子:3.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问到第24个月时,每个月的兔子总数为多少?
def ff(mon):
if mon<=0:
return 0
if mon==1 or mon==2:
return 1
#声明变量表示上上个月的
m1=1
#上个月的
m2=1
#当月的
m3=1
while (mon-2)>0:
#当月的=上个月的+上上个月的
m3=m2+m1
#把上个月的转换为上上个月的
m1=m2
#把当月的转换为上个月的
m2=m3
mon-=1
return m3
mm=int(input("请输入月份:"))
cout=ff(mm)
print("第%s个月兔子总数:%s对"%(mm,cout))
求第n个月=ff(n-1)+ff(n-2)
def ff2(mon):
if mon<=0:
return 0
if mon==1 or mon==2:
return 1
return ff2(mon-1)+ff2(mon-2)
mm=int(input("请输入月份:"))
cout=ff2(mm)
print("递归求兔子问题 第%s个月兔子总数:%s对"%(mm,cout))
匿名函数
匿名函数的语法:
lambda [arg,arg2...,argn]:表达式
例子:
def haha(a,b):
return a+b
c=haha(10,2)
print(c)
f1=lambda x,y:x+y
z=f1(10,2)
print(z)
f2=lambda ls:ls.append(12)
ls2=[1,2,3]
f2(ls2)
print(ls2)
print("**************")
def haha2(a,b):
return a+b
print(haha2)
xixi=haha2
print(xixi)
xx=xixi(3,4)
print(xx)
def outter(fun):
ret=fun(3,6)
print(ret)
outter(haha2)
outter(lambda x1,y1:x1+y1)
局部变量和全局变量
全局变量:
-
在函数外部声明的变量,是全局变量
-
在函数内部,可以使用global关键字声明全局变量
在函数中不能改变全局变量值 如果在函数中修改全局变量的值 可以使用global关键字
局部变量:
在函数内部声明的变量是局部变量
形式参数也属于局部变量
全局变量和局部变量作用域:
1.全局变量作用域:
全局变量整个py文件中都是有效的
- 局部变量作用域:
局部智能声明在它的函数中使用
局部变量超出声明它的范围 会被自动释放掉
注:在函数中,局部变量和全局变量重名时,在全局变量会被覆盖掉
x=40
def f3():
x=30
print(x)
f3()
print(x)
网友评论