python中函数的介绍
文章目录
- python中函数的介绍
- 一、函数的返回值
- 二、文档字符串
- 1、在定义函数时,可以在函数内部编写文档字符串,文档字符串就是对函数的说明
- 2、help()是Python中内置函数,通过help()函数可以查询Python中函数的用法
- 三、函数的作用域
- 1、作用域(scope)
- 四、命名空间
- 五、递归函数
- 六、作业
- 1、用函数实现一个判断用户输入的年份是否是闰年的程序
- 2、 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?
一、函数的返回值
- 返回值就是函数执行以后返回的结果
- 通过return来指定函数的返回值
- return后面可以跟任意对象,返回值甚至可以是一个函数
def fun(*args):
res = 0
for i in args:
res += i
return res, 1, res-1, i
result = fun(1, 2, 3, 4, 5)
print(result) # (15, 1, 14, 5)
二、文档字符串
- 文档字符串,运用于对函数或者面向对象做功能、参数等的说明帮助文档。
1、在定义函数时,可以在函数内部编写文档字符串,文档字符串就是对函数的说明
def fun(a, b):
"""
文档字符串示例
这和函数的功能是......
:param a: 作用 功能 类型 默认值
:param b: 作用 功能 类型 默认值
:return: 需要
"""
2、help()是Python中内置函数,通过help()函数可以查询Python中函数的用法
help(print)
# 运行结果:print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
三、函数的作用域
1、作用域(scope)
- 作用域指的是变量生效的区域
- 在Python中一共有两种作用域
- 全局作用域
- 全局作用域在程序执行时创建,在程序执行结束时销毁
- 所有函数以外的区域都是全局作用域
- 在全局作用域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进行访问
a = 1
def fun():
pass
b = 1
# 这一段代码中的a,b为全局作用域
- 函数作用域
- 函数作用域在函数调用时创建,在调用结束时销毁
- 函数每调用一次就会产生一个新的函数作用域
- 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问
b = 456
def fun1():
a = 123
print('函数内部', a)
print('函数内部', b)
fun1()
print('函数外部', b) # 打印结果 函数内部 123 函数内部 456 函数外部 456
print('函数外部', a) # 会报错,因为a为局部作用域,函数外面访问不到
def fun2():
global a # global :声明 :a为全局变量
a = 20
def fun3():
print('fun3里面', a)
fun3()
fun2()
print(a) # 打印结果:fun3里面 20 20
四、命名空间
- 命名空间实际上就是一个字典,是一个专门用来存储变量的字典
- locals()用来获取当前作用域的命名空间
a = 1
b = 2
c = 3
d = 4
print(locals())
# 打印结果为:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001EBA877B160>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/niezeyu/基础班/函数二/函数的命名空间.py', '__cached__': None, 'a': 1, 'b': 2, 'c': 3, 'd': 4}
- 如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间
- 返回值是一个字典
def fun():
print(locals())
fun() # {}创建一个空字典
def fun1():
e = 5
print(locals())
fun1() # {'e': 5}
五、递归函数
- 递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,在去解决问题
- 递归式函数有2个条件
- 基线条件 问题可以被分解为最小问题,当满足基线条件时,递归就不执行了
- 递归条件 可以将问题继续分解的条件
# 实现10的阶乘
# 方法1
print(1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
# 方法2
n = 10
for i in range(1, 10):
n *= i
print(n)
# 方法3
def fun(x):
for i in range(1, x):
x *= i
return x
fun(10)
print(fun(10))
# 方法4:用递归函数来实现
def fun1(x):
if x == 1:
return 1
return x * fun1(x - 1)
print(fun1(10))
- 递归函数的练习
# 实现n的m次幂
def fun(n, m):
if m == 1:
return n
return n * fun(n, m - 1)
print(fun(10, 5))
六、作业
1、用函数实现一个判断用户输入的年份是否是闰年的程序
- 1.能被400整除的年份
- 2.能被4整除,但是不能被100整除的年份
- 以上2种方法满足一种即为闰年
def fun(mon):
"""
判断输入的年份是否为闰年
:param mon: 默认参数
:return: 不需要
"""
if mon % 400 == 0:
print(f'{mon}为闰年')
elif mon % 4 == 0 and mon % 100 != 0:
print(f'{mon}为闰年')
else:
print(f'{mon}不是闰年')
while True:
mon = input('请输入年份:')
if mon.isdigit() == True:
mon = int(mon)
fun(mon)
else:
print('输入错误,请重新输入!')
2、 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?
def fun(n):
if n == 1:
return 1
return (fun(n-1)+1)*2
print(fun(10))