1. 程式人生 > >python學習例項(3)

python學習例項(3)

#===================================
#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=20
    print(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.1

b, c=2, 4
def g_func(d):
    global a
    a=d*c
g_func(b)
print(a)



#練習題3.4.2

a=10
def func():
    x=a
    print(x)
func()
print(a)



#練習題3.4.3

a=10           
def func(b):
    c=a+b
    print(c)
func(1)



#<程式:四則運算例子>
def do_div(a, b):
    c=a//b               #a, b, c都是do_div()中的區域性變數
    print (c)
    return c

def do_mul(a, b):
    global c
    c=a*b               #a, b是do_mul()的區域性變數,c是全域性變數
    print (c)
    return c

def 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//i
            break  		#跳出for迴圈
    else:  #假如離開迴圈正常,沒有碰到break,就執行else內的print,x是質數
        print("Prime Factor:",x)
    print("區域性變數:引數x:%d, 變數y:%d" %(x,y))
    return
factors(18)