#===================================
#3.4 关于Python的函数调用
#===================================#+++++++++++++++++++++++++++++++++++
#3.4.2 Python函数入门
#+++++++++++++++++++++++++++++++++++#<程序:计算4+3*22>
#函数f
def f(x, y):return x*y*y#主函数部分
c=4+f(3, 2)
print (c)#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#3.4.3 局部变量(Local variables)与全局变量(Global variables)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#<程序:打印局部变量a和全局变量a>
a=10 #函数外
def func():a=20 #函数内,局部变量的赋值,不会改变全局变量。print(a) #函数内
func()
print(a) #函数外的a#<程序:关键字global引用全局变量>
a=10
def func():global a #宣告这个是全局变量。a=20print(a)
func()
print(a)#<程序:a, b, c是否为局部变量?>
b,c=2,4
def g_func():a=b*c #a是局部变量d=a #d是局部变量,其他都是全局变量。print(a,d)
g_func()
print(b,c)#练习题3.4.1b, c=2, 4
def g_func(d):global aa=d*c
g_func(b)
print(a)#练习题3.4.2a=10
def func():x=aprint(x)
func()
print(a)#练习题3.4.3a=10
def func(b):c=a+bprint(c)
func(1)#<程序:四则运算例子>
def do_div(a, b):c=a//b #a, b, c都是do_div()中的局部变量print (c)return cdef do_mul(a, b):global cc=a*b #a, b是do_mul()的局部变量,c是全局变量print (c)return cdef do_sub(a, b): c=a-b #a, b, c都是do_sub()中的局部变量c=do_mul(c, c) c=do_div(c, 2)print (c)return c def do_add(a, b): #参数a和b是do_add()中的局部变量global c c=a+b #全局变量c,修改了c的值c=do_sub(c, 1) #再次修改了全局变量c的值print (c) #所有函数外先执行:
a=3 #全局变量a
b=2 #全局变量b
c=1 #全局变量c
do_add(a, b) #全局变量a和b作为参数传递给do_add()
print (c) #全局变量c#===================================
#3.5 函数调用过程的分析
#===================================#+++++++++++++++++++++++++++++++++++
#3.5.2 函数调用时栈的管理
#+++++++++++++++++++++++++++++++++++
#<程序:因数分解> Print all the prime factors (>=2) of x. By Edwin Sha
import math #为了要调用平方根函数,此函数在math包里
def factors(x): #找到x的因数y=int(math.sqrt(x))for i in range(2,y+1): #检查从2 到 x的平方根是否为x的因数if (x %i ==0): #发现i是x的因数print("Factor:",i);factors(x//i) #递归调用自己,参数变小是x//ibreak #跳出for循环else: #假如离开循环正常,没有碰到break,就执行else内的print,x是质数print("Prime Factor:",x)print("局部变量:参数x:%d, 变量y:%d" %(x,y))return
factors(18)