#函数基础
def printhello(): # def 定义函数
print ( 'hello python' ) #函数执行部分
def printNum():
for i in range ( 0 , 10 ):
print (i)
return
def add(a,b):
return a+b
printhello() #调用函数
print (printNum())
print (add( 1 , 2 ))

#定义函数并函数调用 #把my_abs()的函数定义保存为funct.py文件中
from funct import my_abs #用 from afunct import my_abs来导入my_abs()函数 ,注意funct是文件名(不含.py扩展名)
b=my_abs(- 12 )
print (b) # 12

def m(): #定义空函数
pass #实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来

import math #import math语句表示导入math包 ,并允许后续代码引用math包里的sin、cos等函数
#返回多个值得函数
def move(x,y,step,angle= 0 ): #定义一个函数
nx=x+step*math.cos(angle)
ny=y-step*math.sin(angle)
return nx,ny
x,y=move( 100 , 100 , 60 ,math.pi/ 6 )
print (x,y) #结果 151.96152422706632 70.0
r=move( 100 , 100 , 60 ,math.pi/ 6 ) #Python的函数返回多值其实就是返回一个tuple
print (r) #结果 (151.96152422706632, 70.0)
#递归函数
#如果一个函数在内部调用自身本身,这个函数就是递归函数
def fact(n): #定义一个求阶乘的函数
if n== 1 :
return 1
else :
return fact(n- 1 )*n
b=fact( 5 )
print (b) #结果是120
#使用递归函数需要注意防止栈溢出。
# 在计算机中,函数调用是通过栈(stack)这种数据结构实现的
# 每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。
# 由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出