1、返回值
返回值就是函数执行以后返回的结果
使用return返回一个函数:
def f1():
return 'hello'
def f2():
return f1()
print(f2())
>>> hello
使用return来指定函数的返回值
我们可以直接使用函数的返回值也可以通过变量来接收函数的返回值
return后面可以跟任何值,甚至是一个函数
在函数中,return后面的代码不会执行,return一旦执行函数自动结束
def f3():
print('hello')
print('world')
f3()
print()
def f4():
print('hello')
return
print('world')
f4()
>>> hello
>>> world
>>> hello
#return和break的区别
def f5():
for i in range(5):
if i == 4:
break
print(i)
print('结束')
f5()
print('-----------')
def f5():
for i in range(5):
if i == 4:
return
print(i)
print('结束')
f5()
>>> 0
>>> 1
>>> 2
>>> 3
>>> 结束
-----------
>>> 0
>>> 1
>>> 2
>>> 3
在使用return时,在跳出内循环后,如果外部没有另外的return的话,就直接退出函数了,有return的话会执行return,使用break只会结束当前的循环,会继续循环代码块外面的代码
调用函数对象还是调用函数
def f1():
return 'hello'
print(f1) ##打印的函数对象(对象是一个地址)
print(f1())#打印的函数返回值
>>> <function f1 at 0x000001D244F81BF8>
>>> hello
调用函数需要加括号,调用函数对象不需要加括号,对象实际上是一个内存地址
2、文档字符串
相当于为函数写的一个注释
通过help()函数查询其他函数的用法(使用符号 ? 也可以进行查询)
#通过写一个文本说明可以使用help()或者 ? 对函数功能进行查询
def f0(a, b, c):
'''
a: type :int 默认
b:type:默认
c ....
'''
help(f0)
>>> Help on function f0 in module __main__:
f0(a, b, c)
a: type :int 默认
b:type:默认
c ....
三、作用域
#作用域指的就是变量生效的区域
#全局作用域
# 全局作用域在程序执行时创建,在程序执行结束时销毁
# 所有函数以外的部分都是全局作用域
# 在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置访问
#函数作用域
# 函数作用域在函数调用时创建,在调用结束后销毁
# 函数每调用一次就会产生一个新的作用域
# 在函数作用域中定义的变量都是局部变量,它只能在函数内部被访问到
a = 'nihao'
def fu():
b = 10
print('在函数内a= ', a)
print('在函数内b= ', b)
fu()
print()
print('在函数外a= ', a)
# print('在函数外b= ', b) #NameError: name 'b' is not defined
>>> 在函数内a= nihao
>>> 在函数内b= 10
>>> 在函数外a= nihao
如果希望在函数的内部修改全局变量需要使用关键字:global
# 希望在函数内部修改全局变量
a = 10
def f():
a = 20
print(a)
f()
print(a)
print()
a = 10
def f():
global a #声明在函数内部使用的a是全局变量
a = 20
print(a)
f()
print(a)
>>> 20
>>> 10
>>> 20
>>> 20
四、命名空间
命名空间实际上是一个字典,专门用来存储变量的字典
locals()函数可以用来获取当前作用域的命名空间
globals()函数可以在任意位置获得全局变量命名空间
#如果在全局作用域中调用locals()则获取的是全局命名空间,如果在函数作用域中调用,则获取的是函数的命名空间 返回是一个字典
# 在函数内部调用locals()会获取到函数的命名空间
def fn4():
a = 10
# s = locals() # 在函数内部调用locals()会获取到函数的命名空间
# s['c'] = 20
# print(c)
# print(s)
# globals() 函数可以用来在任意位置获取全局命名空间
global_space = globals()
print(global_space)
fn4()
五、递归
让一个表达式递减,如数字、字符串的量逐次减小。达到递归的目的
## 练习,尝试求10的阶乘(10!)
def factorial(a):
'''
用来求阶乘
a必须是一个整数
'''
pro = 1
for i in range(1 ,a+1):
pro *= i
return pro
for i in range(1, 10):
print(i,'的阶乘是', factorial(i))
>>> 1 的阶乘是 1
>>> 2 的阶乘是 2
>>> 3 的阶乘是 6
>>> 4 的阶乘是 24
>>> 5 的阶乘是 120
>>> 6 的阶乘是 720
>>> 7 的阶乘是 5040
>>> 8 的阶乘是 40320
>>> 9 的阶乘是 362880
#递归式函数
def f(n):
### 1、基线条件:判断基准条件,或者其实递归条件
if n == 1:
return 1
#递归条件
return n * f(n-1)
通过递归式函数也可以达到上面那个求阶乘的要求
#练习1、创建一个函数来为任意数字做幂运算
#递归的练习
#练习1、创建一个函数来为任意数字做幂运算
def fun_mi(n, i):
'''
n: 底数
i: 指数
'''
if i == 1:
return n
return n * fun_mi(n, i-1)
c = fun_mi(5,2)
print(c)
>>> 25
练习二、#创建一个函数,用来检测任意字符串是否是回文字符串
#回文字符串:从前往后读,从后往前读一致
def hui_w(str0):
'''用来判断是否为回文,需要传递一个字符串'''
#基线条件只有一个字符肯定是回文
if len(str0) < 2:
return True
else:
if str0[0] != str0[-1]:
return False
return hui_w(str0[1:-1])#切片去除第一个和最后一个
print(hui_w('101'))
>>> True