函數
# def test(): #定義一個函數,關鍵字def
# print("OK")
#
# test() #引用函數
# import time
#
#
# def logger(n):
# time_format = '%Y-%m-%d %X'
# time_current = time.strftime(time_format)
#
# with open('日誌記錄','a') as f:
# f.write('%s end action%s\n' %(time_current,n))
#
# def action1(n):
# print('starting action1...')
# logger(n)
#
# def action2(n):
# print('starting action2...')
# logger(n)
#
# def action3(n):
# print('starting action3...')
# logger(n)
#
# action1(1)
# action2(2)
# action3(3)
#形參
# def print_info(name,age,sex='man'): #sex定義默認參數
# print("name: %s" %name)
# print("age: %d" %age)
# print("sex: %s" %sex)
# #必須參數
# # print_info('hao',11)
# #關鍵字參數
# print_info(name='xiaoxue',age=22)
#不定長參數
# *args ---一個元素,元組
# def add(*args):
# sum = 0
# for i in args:
# sum += i
# print(sum)
# add(1,2,3,4)
# **kwargs---一個key,一個值,字典
# def f(**kwargs):
# for i in kwargs:
# print('%s:%s' %(i,kwargs[i]))
# f(name='hao',age=18)
#關鍵字參數最左,默認參數隨後,沒有命名在中間(*args),有命名放最後(**kwargs)
# def f(sex=1,*args,**kwargs):
return返回值
def f(*args):
# sum = 0
# for i in args:
# sum += i
# # return sum #返回結果
# a = f(1,3)
# print(a)
#返回結果None
#注意點:1.函數裏如果沒有return,會默認返回一個None
#2.如果return多個對象,那麼Python會幫我們做成一個對象元組
#作用域
# count = 10
#
# def outer():
# # global count #修改全局變量要global關鍵字聲明count爲全局變量
# # print(count)
# count = 4
# # print(count)
# def inter():
# nonlocal count #修改嵌套變量,要nonlocal關鍵字聲明
# count = 20
# print(count)
# inter()
# outer()
高階函數
def f(n):
return n**2
def foo(a,b,func):
result = func(a) + func(b)
print(result)
foo(1,3,f)
#輸出結果:10
1. 函數名可以進行賦值
2. 函數名可以作爲函數參數,還可以作爲函數的返回值
def t():
def inner():
return 8
return inner
ret = t()
print(ret)
#輸出結果:<function t.<locals>.inner at 0x006AAA50>
遞歸:
# def fat(n):
# ret = 1
# for i in range(1,n+1):
# ret *= i
# return ret
# print(fat(5))
# #輸出結果:120(5*4*3*2*1)
##遞歸
#1. 調用自身函數
#2. 有一個結束條件
#但凡是遞歸可以寫,循環也能寫
#遞歸效率比較低
# def fat(n):
# if n ==1:
# return 1
# return n * fat(n-1)
# print(fat(5))
#斐波數列
# a = 0
# b = 1
# while b < 100:
# print(b ,end=' ')
# a, b = b, a + b