函数的参数默认值
注意:如果定义的函数中存在有默认值的参数,应该放在没有默认值参数的后面
def get_circle_area(r,pi=3.14):
return r*pi*r
#当pi没有赋值时,pi有默认值,那么pi就以默认值计算
area = get_circle_area(5)
print(area)
多个返回值——元组
在大多数编程语言中,函数返回值只能是一个值,但是python的函数特别的强大,支持返回多个值。
def get_react(w,h):
area = w * h
cal = (w + h )*2
return area,cal
(x,y )=get_react(8,10)
print(x)
print(y)
函数传递问题
值传递和引用传递内存分析
函数是一个对象
栈:先进后出,后进先出。
python中交互两个变量
第三变量中转
temp=b
b=a
a=temp
运算方式
a=a+b
b=a-b
a=a-b
在python中支持 #寄存器参与
a=10
b=20
a,b=b,a
a=20
b=10
函数调用时内存的变化问题
函数的调用时在栈中,压栈
匿名函数(lambda)
在弱数据类型语言,函数一般都是对象。
在函数中调用函数
fn(msg):
print("------------")
print(msg)
def show(fn):
fn("哈哈,我是参数")
print("注意,fn是一个函数")
#调用show函数
#fn是函数
#python中,函数可以当成参数传递函数内部
show(fn)
输出:
------------
哈哈,我是参数
注意,fn是一个函数
匿名函数
def show(f):
f()
print("注意,fn是一个函数")
#优点:简化了代码操作
#降低了代码的可读性、维护成本增加了
show(lambda :print('呵呵'))
lambda:()
输出:
呵呵
注意,fn是一个函数
函数几种特殊参数(可变参数、命名参数、万能参数)
- 可变参数
# *变量名称 函数的形参
#该参数是一个可变参数
def fn(x,y,*args):
#注意:可变参数默认是一个元组
print(x+y)
print(args)
fn(50,80,100,45,90)
输出:
130
(100, 45, 90)
- 命名参数
#命名参数,**变量名称 字典
#调用时 变量=值
def fn2(x,y,**kwargs):
print(kwargs)
print(kwargs.get('name'))
print(x+y)
fn2(80,100,name="liujianhong",age=16,sex='男')
输出:
{'name': 'liujianhong', 'age': 16, 'sex': '男'}
liujianhong
180
- 万能参数
#可变参数+命名参数=万能参数
def fn3(x,y,z,*args,**kwargs):
print(args)
print(kwargs)
print(x+y+z)
fn3(20,30,40,'hello','16','陕西',color='yellow',where='Chian')
输出:
('hello', '16', '陕西')
{'color': 'yellow', 'where': 'Chian'}
90
递归
函数自身调用自身叫做递归
递归,一定要有结束条件,如果没有,则递归是个死循环
def sum(start,end):
res=0
for i in range(start,end+1):
res+=i
return res
res=sum(0,100)
print(res)
def sum(num):
if num == 1:
return 1
return num + sum(num-1)
print(sum(100))
变量作用域 global关键字
局部变量:定义在函数内部的变量叫做局部变量;局部含量作用域只有在本函数内有效,外界无法访问
定义了一个全局变量
a = 100
def get_react(w, h):
# 报错,如果在函数内部操作(改变值)全局变量(本地变量)
# Python是不允许的,如果一定要操作,可以,请先申明
# 使用关键字global 变量名称 申明该函数要操作对应的全局变量
global a
a += 10
print(a)