函数
return返回值
- return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
- return 语句在同一函数中可以出现多次,但只要有一个得到执行,就会直接结束函数的执行
文档字符串
- 在函数体的第一行使用一对三个单引号 ‘’’ 或者一对三个双引号 “”" 来定义文档字符串。
- 可以使用 doc(注意双下划线)调用函数中的文档字符串属性。
def function():
''' say something here!
'''
pass
print (function.__doc__) # 调用 doc
#输出结果为:
say something here!
- 文档字符串使用惯例:它的首行简述函数功能,第二行空行,第三行为函数的具体描述。
函数的作用域
- 作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只能在 for 循环内部使用。
- 所有函数以外的区域都是全局作⽤域,在全局作⽤域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进⾏访问
- 在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为局部变量
- 函数的参数也属于局部变量,只能在函数内部使用。
- 在函数体内定义全局变量。即使用 global 关键字对变量进行修饰后,该变量就会变为全局变量。
def text():
global add
add= "http://c.biancheng.net/java/"
print("函数体内访问:",add)
text()
print('函数体外访问:',add)
命名空间
- 命名空间实际上就是⼀个专门⽤来存储变量的字典
- 通过调用locals() 函数,我们可以得到一个包含当前作用域内所有变量的字典。
“当前作用域”指的是,在函数内部调用 locals() 函数,会获得包含所有局部变量的字典;而在全局范文内调用 locals() 函数,其功能和 globals() 函数相同。
递归函数
-
递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,再去解决问题
-
递归式函数有2个条件:
1.基线条件: 问题可以被分解为最⼩问题,当满⾜基线条件时,递归就不执⾏了2.递归条件: 可以将问题继续分解的条件
#需求:求10!的值
#n!= n *(n-1)!
#10!=10*9!
# 9!=9*8!
#......
#1!=1
def fun(n):#求n!的值
if n == 1:
return 1
return n*fun(n-1)
print(fun(10))
作业
-
用函数实现一个判断用户输入的年份是否是闰年的程序
1.能被400整除的年份
2.能被4整除,但是不能被100整除的年份
3.以上2种方法满足一种即为闰年
def year(y):
if y % 400 == 0:
return True
elif y % 4 == 0 and y % 100 > 0:
return True
else:
return False
- 猴子吃桃问题(递归)
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?
def num(d):
if d==10:
return 1
else:
return (num(d+1)+1)*2
print(num(1))