Python核心编程09-----函数返回值,作用域
程序员文章站
2022-03-15 09:25:09
...
目录
1.函数的返回值
- 就是返回函数执行的结果
- 通过return来指定函数的返回值
- return后面可以跟任意的对象,甚至可以是一个函数,return后的函数不用加()
- 在函数中return后的代码都不会执行,一旦return执行,函数自动结束
def fn():
print('aaaa')
return
print('bbbb')
print(fn())
输出:
aaaa
None
- break和return的区别
def fn():
for i in range(5):
if i == 3:
break #用来退出当前循环
print(i)
print('循环执行完毕')
fn() 输出:0 1 2 循环执行完毕
def fn():
for i in range(5):
if i == 3:
return #函数结束
print(i)
print('循环执行完毕')
fn() 输出:0 1 2
continue用来跳过档次循环
- fn是函数对象 打印fn就是在打印函数对象
- fn()调用函数 打印fn()就是在打印fn()的返回值
2.文档字符串
- help()内置函数 可以查询Python中函数的用法
- 语法:help(函数对象) 如:help(print)
- 在定义函数的时候,可以在函数内部编写文档字符串,文档字符串就是函数的说明
- 当我们编写了文档字符串是,就可以通过help()函数来查看函数的说明
3.函数的作用域
- 作用域(scope)指的是变量生效的区域
- 在python当中有两种作用域
- 全局作用域:
- 在程序执行的时候创建,执行结束的时候销毁
- 所有函数以外的区域都认为是全局作用域
- 在全局作用域当中定义的变量,都是全局变量
- 全局变量可以在程序的任意位置进行访问
- 函数作用域:
- 在函数调用的时候创建,函数结束时销毁
- 函数每调用一次就会产生一个新的函数作用域
- 在函数作用域中定义的变量,都是局部变量,他只能在函数内部被访问
b = 20
def fn():
a = 10
print('函数内部:a =',a) 输出:函数内部:a = 10
print('函数内部:b =',b) 输出:函数内部:b = 20
fn()
print('函数外部:a =',a) 输出:报错:NameError: name 'a' is not defined
print('函数外部:b =',b) 输出:函数外部:b = 20
因为a是函数内变量,属于局部变量,所以在函数外部无法被访问,所以报错
- 内部可以调用外部变量 如:
def fn2():
a = 30
def fn3():
print('fn3中:a =',a)
fn3()
fn2() fn3中:a = 30
- global()关键字 :在局部修改全局的变量
a = 456
def fn3():
#在函数内部修改全局变量,需要使用global关键字,来声明局部变量
global a #声明在函数内部使用的a是全局变量,此时修改a就是在修改全局的a
a = 123
print('函数内部a = ',a)
fn3()
print('函数外部a = ',a)
4.命名空间
- 命名空间就是一个字典
- 是一个专门用来保存变量的字典
- locals()用来获取当前作用域的命名空间
- 返回值是一个字典
在函数外部调用locals()
a = 123
b = 456
scope = locals()
print(a) 输出:123
print(scope['a']) 输出:123
#向scope里面添加了一个key-value
scope['c'] = 789
print(c) 输出:789
- locals()在函数内部调用
def fn():
a = 1
scope = locals()
print(scope) 输出:{'a': 1}
fn()
- globals()函数可以用来获取全局的命名空间
a = 123
b = 456
def fn():
a = 1
scope = locals()
print(scope)
global_scope = globals()
print(global_scope)
输出:{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001C989116550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/py_Project/基础/09/命名空间.py', '__cached__': None, 'a': 123, 'b': 456, 'fn': <function fn at 0x000001C9890CC378>}
fn()
5.递归函数
- 递归式的函数
- 从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,讲的是:从前有座山,山里................
- 递归简单理解就是自己调用自己
- 递归式的函数,在函数中自己调用自己
- 1.基线条件
- 问题可以被分解为最小的问题,当满足基线条件时,递归就不再执行
- 2.递归条件
- 将问题继续分解的条件
- 用递归的思想解决任意数的阶乘
def fn(n):
#1.基线条件
if n==1:
return 1
#2.递归条件
return n*fn(n-1)
print(fn(10)) 输出:3628800
- 例子1
#定义一个函数,为任意数字做任意的幂运算
#3**4 = 3*3
#3**4 = 3*3**3
#3**3 = 3*3**2
#3**2 = 3*3**1
#3**1 = 3
def fn(x,y):
#参数x代表任意数字,y代表任意幂次方
#1.基线条件
if y==1:
return x
#2.递归条件
return x*fn(x,y-1)
print(fn(2,3)) 输出:8
- 例子2
#定义一个函数,用来检测任意的一个字符串是否是回文字符串,如果是返回True,不是返回False
#回文字符串 字符串从前往后念和从后往前念是一样的 例如 abcba
#abcdefgfedcba
#如果第一个字符和最后一个字符不一致,则该字符串一定不是回文字符串
#abcdefgfedcba
# bcdefgfedcb
# cdefgfedc
# 。。。。。
# g
def fn2(s):
# 参数s标识要检查的字符串
# 1.基线条件
if len(s) < 2:
return True
elif s[0] != s[-1]:
return False
# 2.递归条件
return fn2(s[1:-1])
print(fn2('ababcbaba')) 输出True
上一篇: 小程序中如何实现分享功能 (代码示例)
下一篇: css怎么设置盒子两像素黑色边框