Python筆記(函數)

函數就是將一些語句集中在一起的一個部件,
目的是減少我們同一段代碼的複製粘貼,需要的時候以函數調用來代替,實現代碼的複用
函數定義語法:
def 函數名(0個或多個參數):
函數內要執行的代碼
return 返回值

#函數可以只定義函數名,沒有參數,也沒有返回值
def hello():
    print 'Hello World!'

# 函數的調用
res = hello()   #Hello World!
print type(res   #<type 'NoneType'>

# 函數有返回值
# 函數的命名規則:一個單詞直接小寫
# 多個單詞,每個單詞小寫,以下劃線分隔
def get_list():
    return [1,2,3,4]

aList  = get_list()
print type(aList),aList

# 函數可以有多個return語句,遇到return語句,跳出函數
def get_smaller(x,y):
    if x<y:
        return x
        print 'x is smaller'
    else:
        return y

smaller = get_smaller(1,2)
print smaller

# 函數有參數
# 參數:形參和實參,形參和實參要一一對應
def add(x,y):
    return x+y
sum = add(1,2)
print sum

# 參數傳遞不正確的情況

# sum = add()
#TypeError: add() takes exactly 2 arguments (0 given)

# sum = add(1,2,3)
#TypeError: add() takes exactly 2 arguments (3 given)

# 默認參數
# 爲了提高程序的健壯性,
# 如果我們想在x,y值不傳的時候,也給出一個默認的結果,就需要用到默認參數
# 參數有默認值之後,可以根據需要傳遞實參
def add(x =2,y=3):
    return x+y
sum = add()
print sum

sum = add(1)
print sum

sum = add(1,2)
print sum

# 函數的參數可以是任意類型
def print_item(x):
    print x
print_item(1)
print_item(1.0)
print_item('string')
print_item([1,2,3])
print_item((1,2,3))

# 函數的參數可以是不同類型
def print_userinfo(name,age):
    print 'username is %s and age is  %d'%(name,age)
print_userinfo('xiaoming',18)

# 可以將要傳遞的參數放在tuple中
aTuple = ('xiaoming',18)
print_userinfo(*aTuple)

def print_userinfo(name='name',age=18):
    print 'username is %s and age is  %d'%(name,age)

# 要傳遞的參數放在字典中
aDict = {'age':20,'name':'xiaoming'}
print_userinfo(**aDict)

# key不對應的情況
aDict = {'height':20,'name':'xiaoming'}
print_userinfo(**aDict)
#TypeError: print_userinfo() got an unexpected keyword argument 'height'

# 可變長度的參數
def print_userinfo(name,age,*tuple_args,**dict_args):
    print 'username is %s and age is  %d'%(name,age)
    print tuple_args
    print dict_args

print_userinfo('xiaoming',18)
#username is xiaoxing and age is  18
#()
#{}

# 傳遞參數有冗餘時,直接傳遞會報錯,如何解決
# 冗餘參數會傳遞到tuple_args

print_userinfo('xiaoming',18,170)
#username is xiaoming and age is  18
#(170,)
#{}

aTuple = ('xiaoming',18,170)
print_userinfo(*aTuple)
#username is xiaoming and age is  18
#(170,)
#{}

# 冗餘參數存放到dict_args
print_userinfo(name = 'xiaoming',age = 18,height = 170)
#username is xiaoming and age is  18
#()
#{'height': 170}

# 冗餘參數170,'xiaohong'存放到tuple_args,height = 170 存放到dict_args
print_userinfo('xiaoming',18, 170,'xiaohong',height = 170)、

#username is xiaoming and age is  18
#(170, 'xiaohong')
#{'height': 170}

# 重複傳值給name參數
print_userinfo('xiaoming',18, 170,name = 'xiaohong',height = 170)
#TypeError: print_userinfo() got multiple values for keyword argument 'name'
# 函數內部可以調用其他函數
def cal(x,y):
    print x+y
res =  cal(1,2)

# 如果一個函數在內部調用自身,這個函數叫做遞歸函數
# 舉例:求一個數n的階乘
# n的階乘爲n*(n-1)*(n-2)...*1
# n! = n*(n-1)!
# n爲1的時候,階乘爲1
def factorial(n):
    if n==1:
        return 1
    else:
        return n * factorial(n - 1)

print factorial(5)
# 變量的作用域問題
# 根據變量聲明的位置的不同,變量存在不同的作用域:全局,局部
# 全局變量,局部變量
# 變量的作用域限制了你在哪個地方可以訪問哪個變量
global_var = 'global'
def foo():
    local_var = 'local'
    print global_var+local_var

foo()

# foo中可以對所有的變量進行訪問,但是函數外只能訪問全局變量,無法訪問函數的內部變量
# local_var是在函數體中定義的,只能在函數foo中使用
# global_var是在函數體外定義的,可以在腳本的任意一個位置訪問
print global_var
# print local_var

# x = 'xiaoming'
# def fun():
#     x='xiaohong'
#     print x
# fun()
# print x


# 函數內部也可以定義全局變量
# 使用global關鍵字
# 注意:必須要先調用函數,函數體中定義的全局變量才能生效
x = 'xiaoming'
def fun():
    x='xiaohong'
    global global_y
    global_y = 'xiaofang'
    print x
fun()
print x
print global_y

# 如何在函數中修改全局變量的值
x = 'xiaoming'
def fun():
    global x
    x='xiaohong'
    print x
fun()
print x
# 匿名函數,lambda
def func(x,y):
    return x+y
func = lambda x,y:x+y


# reduce()函數
list1 = [1,2,3]
def add(x,y):
    return x+y
print reduce(add,list1)
print reduce(lambda x,y:x+y,range(1,101))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章