deffunction_1():print('函数1开始了')print('函数1结束了')deffunction_2():print('函数2开始了')print('开始调用函数1')
function_1()print('函数1调用结束')print('函数2结束了')
function_2()# 函数2开始了# 开始调用函数1# 函数1开始了# 函数1结束了# 函数1调用结束# 函数2结束了# 求m阶乘的和deffac(n):
x =1for i inrange(1,n+1):
x *= i
return x
defsum(m):
x =0for i inrange(1,m+1):
x += fac(i)return x
print(sum(5))
全局变量和局部变量
Python可以用函数来分隔作用域
函数外部定义的变量是全局变量,在整个py文件中都可以访问
函数内部定义的变量是局部变量,它是局部函数,只能在函数内部使用
内置函数 globals() locals()可以打印函数中的全局变量和局部变量
a =100# a是全局变量
word ='hello'deftest():
b =80# b是局部变量
a =10print(a)# 如果在函数内部声明了一个与外部全局变量相同名称的变量,会新建一个函数内部的局部变量# 而不是修改外部的全局变量# 如果需要修改全局变量,可以使用global关键字global word
word ='thank'print(word)print('locals = {},globals = {}'.format(locals(),globals()))# ocals = {'b': 80, 'a': 10},globals = {'__name__': '__main_........ 全局变量非常多
test()# 10print(a)# 100print(word)# thank
函数多个返回值
return表示一个函数的结束
一般情况下,一个函数最多只会执行一个return语句
特殊情况下(finally语句),下一个函数可能会执行多个return语句
deftest(a,b):
x = a // b
y = a % b
# return x # return y# 以上代码只会执行一个return# return {'x':x,'y':y} # 以字典的形式返回# return [x,y] # 以列表的形式返回# return (x,y) # 以元组的方式返回return x,y # 返回的本质实际上就是返回一个元组print(test(12,5))# (2, 2)
# 使用函数递归求1-n的和
x =0defget_sum(n):global x
x += n
n -=1if n >=1:
get_sum(n)return x
print(get_sum(100))# 5050# 递归方法2defget_sum2(n):if n ==0:return n
return n + get_sum2(n-1)print(get_sum2(100))# 5050# 使用函数递归求n!defget_num(n):if n ==0:return1return n * get_num(n-1)print(get_num(0))# 1# 斐波那契数列的第N个数字defget_fi(n):if n ==2or n ==1:return1return get_fi(n-2)+ get_fi(n-1)print(get_fi(8))# 21
匿名函数
defadd(a,b):return a+b
x = add(1,2)# 函数名(实参)作用是调用函数,获取到行数的执行结果并赋值给变量 x
fn = add # 相当于给函数add起了一个别名叫fn