函数中
1. 函数的返回值
1.返回值就是函数执⾏以后返回的结果
2.通过return来指定函数的返回值
3.return后⾯可以跟任意对象,返回值甚⾄可以是⼀个函数
2. ⽂档字符串
1.help()是Python中内置函数,通过help()函数可以查询Python中函数的⽤法
2.在定义函数时,可以在函数内部编写⽂档字符串,⽂档字符串就是对函数的
说明
3. 函数的作⽤域
1.作⽤域(scope)
2.作⽤域指的是变量⽣效的区域
3.在Python中⼀共有两种作⽤域
(1)全局作⽤域
(2)全局作⽤域在程序执⾏时创建,在程序执⾏结束时销毁
(3)所有函数以外的区域都是全局作⽤域
(4)在全局作⽤域中定义的变量,都是全局变量,全局变量可以在程序的任意
位置进⾏访问
(5)函数作⽤域
(6)函数作⽤域在函数调⽤时创建,在调⽤结束时销毁
(7)函数每调⽤⼀次就会产⽣⼀个新的函数作⽤域
(8)在函数作⽤域中定义的变量,都是局部变量,它只能在函数内部被访问
4. 命名空间
1.命名空间实际上就是⼀个字典,是⼀个专⻔⽤来存储变量的字典
2.locals()⽤来获取当前作⽤域的命名空间
3.如果在全局作⽤域中调⽤locals()则获取全局命名空间,如果在函数作⽤域中
调⽤locals()则获取函数命名空间
4.返回值是⼀个字典
5. 递归函数
1.递归是解决问题的⼀种⽅式,它的整体思想,是将⼀个⼤问题分解为⼀个个
的⼩问题,直到问题⽆法分解时,在去解决问题
2.递归式函数有2个条件
(1). 基线条件 问题可以被分解为最⼩问题,当满⾜基线条件时,递归就不
执⾏了
(2). 递归条件 可以将问题继续分解的条件
1. 函数的返回值
# 函数的返回值可以是任意类型的对象
# 当你不写return语句和只写一个return的时候,返回的是None
# def fun(*args):
# # res = 0
# # for i in args:
# # res += i
#
# # print(res)
# # return 123
# # return 'abc'
# # return [1, 2, 3]
# def fun1():
# print(111)
#
# return
#
#
# res = fun()
#
# print(res)
# return后的代码都不会执行,return一旦执行,函数自动结束
def fun2():
# print(111)
# return
# print('hahah')
for i in range(5): # range(0, 5, 1) 左闭右开型
if i == 3:
# break 用来退出当前循环
# continue 用来跳过当次循环
return
print(i)
print('循环执行完毕')
fun2()
# fun 是函数名(函数对象) 打印fn就是打印函数对象的地址
# fun() 是调用函数 打印fun()就是在打印fun()的返回值
2. ⽂档字符串
def fun(a, b, c):
"""
这是一个文档字符串的示例
这个函数是做什么用的。。。。
:param a: 作用 类型 默认值
:param b: 作用 类型 默认值
:param c: 作用 类型 默认值
:return: 需不需要返回值
"""
return 123
# help(fun)
help(print)
3. 函数的作⽤域
# 函数内部的变量只能在函数内部访问,不能再函数外部访问
b = 456
def fun():
global a # 声明a是全局变量
a = 123
print('函数内部 a = ', a)
print('函数内部 b = ', b)
def fun1():
print('函数fun1内部 a = ', a)
print('函数fun1内部 b = ', b)
fun1()
fun()
print('函数外部 a = ', a)
print('函数外部 b = ', b)
4. 命名空间
# locals()用来获取当前作用域的命名空间,返回一个字典
a = 123
b = 456
c = 789
# space = locals()
# space['d'] = 100
# print(space)
def fun():
a = 1
b = 2
c = 3
# space = locals()
space = globals()
print(space)
fun()
5. 递归函数
# 求10的阶乘
# 1!= 1
# 2!= 2*1
# 3!= 3*2*1
# 10!= 10*9*8*7*6*5*4*3*2*1
# print(10*9*8*7*6*5*4*3*2*1)
#
#
# res = 1
# for i in range(1, 11):
# res *= i
#
# print(res)
#
#
# def fun(n):
# res = 1
# for i in range(1, n+1):
# res *= i
#
# return res
#
#
# res = fun(10)
# print(res)
# 从前有座山,山上有座庙,庙里有个老和尚和小和尚,老和尚对小和尚讲故事:
# 从前有座山,山上有座庙,庙里有个老和尚和小和尚,老和尚对小和尚讲故事:
# 从前有座山,山上有座庙,庙里有个老和尚和小和尚,老和尚对小和尚讲故事:
# 。。。。。。。。。。
# 无穷递归
# 递归的简单李建就是自己引用自己
# 递归式的函数, 在函数中自己调用自己
# 无穷递归
# def fun():
# fun()
# fun()
# 递归函数的两个条件
# 1. 基线条件 问题可以被分解为最小的问题,当满足基线条件的时候,再去解决问题 (设定的最大递归深度)
# 2. 递归条件 将问题继续分解的条件
# 10! n! fun(n) 是求n的阶乘的函数
# 10! = 10 * 9! n*(n-1)! n * fun(n-1) 求n-1的阶乘的函数
# 9! = 9 * 8!
#.....
# 2! = 2*1!
# 1! = 1
def fun(n): # fun求n的阶乘
# 基线条件
if n == 1:
return 1
# 递归条件
return n * fun(n-1)
res = fun(10) # res = 10*fun(9)/10*9*fun(8)/
print(res)
6. 递归函数练习
# 求任意数的任意次幂运算
# n ** m 10 ** 5
# 10 * 10 ** 4
# 。。。。。
# 10 ** 1
# def fun(n, m): # fun是求n的m次幂的结果
# if m == 1:
# return n
# return n * fun(n, m-1)
#
#
# res = fun(10, 5)
# print(res)
# 定义一个函数, 用来检验一个字符串是不是一个回文字符串,如果是返回True,不是返货False
# abcdefghgfedcba
# bcdefghgfedcb
# cdefghgfedc
# h
def fun1(s): # fun1 判断是否是回文字符串
if len(s) < 2:
return True
elif s[0] != s[-1]:
return False
return fun1(s[1:-1])
print(fun1('abcdefggfedca'))
def fun():
a = 10
def fun1():
nonlocal a
第九讲作业
- ⽤函数实现⼀个判断⽤户输⼊的年份是否是闰年的程序
1.能被400整除的年份
2.能被4整除,但是不能被100整除的年份
以上2种⽅法满⾜⼀种即为闰年
def fun():
a = int(input('请输入年份'))
if (a//400) or (a//4 and a/100) :
print('是润年')
else:
print('是平年')
fun()
- 猴⼦吃桃问题(递归):
猴⼦第⼀天摘下若⼲个桃⼦,当即吃了⼀半,还不瘾,⼜多吃了⼀个。第
⼆天早上⼜将剩下的桃⼦吃掉⼀半,⼜多吃了⼀个。以后每天早上都吃了前
⼀天剩的⼀半零⼀个。到第10天早上想再吃时,⻅只剩下⼀个桃⼦了,求第
⼀天共摘了多少桃⼦?
def fun(n):
if n>10 or n<1:
return
elif n==10:
return 1
else:
return (fun(n+1)+1)*2
print(fun(1))