函数的返回值
a.就是返回给使用者的值
b.就是return后面的值
c.就是函数调用表达式的值
python中每个函数都有返回值,返回值就是return后面的值,如果函数中没有return,那么函数的返回值为None
1.函数调用
在存在return时在执行完函数体后,将返回值返回给函数调用表达式,然后回到函数调用的位置
2.return关键字
将renturn后面的值返回给函数调用表达式
函数调用表达式:python中每个函数调用表达式都有值
def f1(a):
print(a)
f1('a')
print(f1('a'))
# 练习:写个函数,判断指定的年龄是否属于成年人(结果返回)
def is_adult(age):
if age >= 18:
return True
return False
print(is_adult(30))
if is_adult(10):
print('可以进网吧')
else:
print('未成年人禁止进入')
person = {'name':'jack','is_adult':is_adult(30)}
print(person)
3.函数的结束
a.函数执行完
b.遇到return
def fun2():
print('123')
return 10
print('333')
print(fun2())
# 练习 写一个函数,求1+2+3+......,和不能大于10000
def sum_limit(a):
sum1 = 0
x = 1
while True:
if sum1 + x >= a:
return sum1,x-1
sum1 += x
x += 1
print(sum_limit(10000),type(sum_limit(10000)))
注:python中函数可以由多个返回值,在return后面返回多个字,每个值之间用逗号隔开,返回为元组
作用域
全局变量:文件开始到结束都能使用
局部变量:开始于函数声明,结束于函数声明
1.全局变量
a=10 #这是一个全局变量
print(a)
def func1():
print(a)
for x in range(10):
b=100#这是一个全局变量
print(a)
print(b)
2.局部变量
def func3():
aaa=100#局部变量
print(aaa)
3.global和nonlocal
- global:在函数中创建一个全局变量
格式:
global 变量名
变量名=值
bcd='bcd'
abc='abc'#全局变量
def func4():
abc='aaa'#局部变量,如果全局变量名和全局变量名相同,在函数中使用的是局部变量
print(abc)
global bcd #说明bcd是一个全局变量
bcd=200
print(bcd)
func4()
print(abc)
print(bcd)
#声明一个变量 统计一个函数调用的次数
count=0
def my_func():
global count
count+=1
print('==========')
my_func()
my_func()
my_func()
print(count)
- nonlocal :在函数中声明函数的时候才需要使用
def func11():
a_11=10
print(a)
#python中函数中可以声明函数
def func12():
nonlocal a_11
a_11=100
print('内部',a_11)
print('内部函数')
func12()
print('外部',a_11)
匿名函数
本质还是函数,以另外一种简单的方式来声明
匿名函数的声明:
函数名 = lambda 参数列表:返回值 --> 结果是一个函数变量
lambda 是声明匿名函数的关键字
# 写一个函数,计算2个数的和
my_sum1 = lambda a,b:a+b
print(my_sum1(1,2))
funcs = []
for i in range(5):
funcs.append(lambda x:x*i)
print(funcs[2](2)) # 8
print(funcs[4](2)) # 8
函数作为变量
声明一个函数就是在声明一个变量
1.函数名可以当成变量来使用
2.可以打印,可以赋值,可以查看,一般对于变量的操作都能对函数进行
# 函数名func1可以当做变量使用
def func1(a):
print(a)
return 10
print(func1,type(func1))
a = func1
b = func1(10) + 100
a('aaa')
# 将函数func1作为列表的元素
functions = [func1,func1(10)]
functions[0]('abc')
1.将函数作为参数
def my_sum(*number):
sum1 = 0
for item in number:
sum1 += item
return sum1
def my_mul(*number):
sum1 = 1
for item in number:
sum1 *= item
return sum1
def operation(x,y,method = ''):
try:
return method(x,y)
except:
return False
print(operation(3,6,my_sum))
python中的三目运算符
值1 if 判断表达式 else 值2--> 判断表达式是否为True,为True整个表达式的结果是'值1',否则是'值2'
a = 10 if 10 > 20 else 20
result1 = operation(10,20,my_sum)
result2 = operation(10,20,my_mul)
result3 = operation(10,20,lambda x,y:x<y)
result4 = operation(10,20,lambda x,y:x if x>y else y)
print(result1,result2,result3,result4)
2.将函数作为函数的返回值
# 写一个函数有一个参数,要求传入一个运算符号(+,-,*,>,<),返回符号对应的功能
# + --> 求和功能
def sum1(*number):
sumx = 0
for item in number:
sumx += item
return sumx
# - --> 求差功能
def sum2(*number):
sumx = number[0]*2
for item in number:
sumx -= item
return sumx
# * --> 求乘功能
def sum3(*number):
sumx = 1
for item in number:
sumx *= item
return sumx
# 程序编码:
def operation_char(char):
if char == '+':
return sum1
elif char == '-':
return sum2
elif char == '*':
return sum3
else:
return lambda *number:None
print(operation_char('+')(10,20))
print(operation_char('-')(10,20))
print(operation_char('*')(10,20))
print(operation_char('i')(10,20))
递归函数
1.什么是函数
在函数的函数体中调用函数本身
循环能做的事情理论上递归都可以做
2.怎么写一个递归函数
a.找临界值(跳出循环 -> return)
b.找关系:假设当前函数对应的功能已经实现,找到f(n)和f(n-1)的关系
c.使用f(n-1)与前面找到的关系去实现f(n)的功能
# 计算1+...+n:
def sum1(n):
if n == 1:
return 1
return n+sum1(n-1)
print(sum1(10))
# 用递归求2*4*6...n:
def sum2(n):
if n == 2:
return 2
return n*sum2(n-2)
print(sum2(8))
# 递归打印图案
'''n=3
***
**
*
'''
def gh(n):
if n < 1:
return
print('*'*n)
gh(n-1)
gh(4)
注:1.对递归的要求:能不用就不用。2.函数调用的过程是一个压栈的过程(没调用一次函数,系统都要为其分配内存空间,用来存储函数中声明变量和参数等,这个内存在函数调用结束后会自动销毁)