函数的返回值(原因及特点)
@1
# 在主函数里用一个变量来接收函数的返回值
def fun(*a):
r = 0
for i in a:
r += i
return r
result = fun(1,2,3,4)
# 再去对变量做操作
result += 4
print(result)
输出:14
@1
def fun1():
def fun2():
print(111)
return fun2
print(fun1()())
输出:
111
None
@2
def fun1():
def fun2():
print(111)
return 112
return fun2
print(fun1()())
输出:
111
112
@1
def fun():
return
print(fun())
输出:None
@2
def fun():
pass
print(fun())
输出:None
def fun():
return 1
print(111)
print(fun())
输出:1
文档字符串
def printMax(x,y):
'''
打印两个数中的最大值。
两个值必须都是在整型数。
'''
x = int(x)
y = int(y)
if x > y:
print(x,'最大')
else:
print(y,'最大')
@1
printMax(3,5)
@2
print(printMax.__doc__)
@3
help(printMax)
输出:
@1
5 最大
@2
打印两个数中的最大值。
两个值必须都是在整型数。
@3
Help on function printMax in module __main__:
printMax(x, y)
打印两个数中的最大值。
两个值必须都是在整型数。
函数的作用域
全局作用域
函数作用域
@1 在函数内声明全局变量
def fun1():
global a
a = 20
def fun2():
print(a)
fun2()
fun1()
print(a)
输出:
20
20
命名空间
@1 获取全局命名空间
a = 1
b = 2
c = 3
d = 4
print(locals())
输出:
{
...,'a': 1, 'b': 2, 'c': 3, 'd': 4}
@2 获取函数命名空间
def fun():
a = 1
b = 2
c = 3
d = 4
space = locals()
print(space)
fun()
输出:{
'd': 4, 'c': 3, 'b': 2, 'a': 1}
@3 获取函数内的全局命名空间
e = 5
def fun():
a = 1
b = 2
c = 3
d = 4
space = globals()
print(space)
fun()
输出:{
..., 'e': 5}
递归函数
@1 普通函数
def fun(a):
for i in range(1,10):
a *= i
return a
print(fun(10))
输出:3628800
@2 递归函数
def fun(n):
# 基线条件
if n == 1:
return 1
else:
# 递归条件
return n * fun(n - 1)
print(fun(10))
输出:3628800
@1 普通函数
def fun(n,m):
for i in range(1,m):
n *= n
return n
print(fun(5,2))
输出:25
@2 递归函数
def fun(n,m):
if m == 1:
# 基线条件
return n
else:
# 递归条件
return n * fun(n,m-1)
return n
print(fun(5,3))
输出:125
def fun(a):
# 基线条件
if len(a) == 1 or len(a) == 0:
return True
elif a[0] != a[-1]:
return False
# 递归条件
return fun(a[1:-1])
a = input(":")
if len(a) < 2:
print("too short")
else:
print(fun(a))
# 用函数实现一个判断用户输入的年份是否是闰年的程序
# 1.能被400整除的年份
# 2.能被4整除、但是不能被100整除的年份
# 以上方法满足一种即为闰年
def fun(n):
if n % 400 == 0 or (n % 4 == 0 and n % 100 != 0):
print("闰年")
else:
print("非闰年")
fun(2015)
fun(2000)
fun(2016)
输出:
非闰年
闰年
闰年
# 猴子吃桃问题(递归)
# 猴子第一天摘下若干个桃子、当即吃了一半、还不瘾、又多吃了一个
# 第二天早上又将剩下的桃子吃掉了一半、又多吃了一个
# 以后每天早上都吃了前一天剩的一半加上一个
# 第十天早上再吃的时候、见只剩一个桃子
# 求一共摘了多少桃子
def monkey_tao(n):
if n>10 or n<1:
return
elif n==10:
return 1
else:
return (monkey_tao(n+1)+1)*2
print (monkey_tao(1))
输出:1534