1. 程式人生 > 實用技巧 >學習心得2020.07.26

學習心得2020.07.26

019 函式:我的地盤我做主

當函式有返回值時,呼叫直接返回返回值
當函式沒有返回值時,呼叫則返回None

020 函式:內嵌函式和內包

global關鍵字

用於在函式中修改全域性變數的值

>>> count=5
>>> def MyFun():
	count=10
	print(count)

	
>>> MyFun()
10
>>> print(count)
5

沒有用global時,函式中不能修改全域性變數

>>> count=5
>>> def MyFun():
	global count
	count=10
	print(count)

	
>>> MyFun()
10
>>> print(count)
10

用了global後,函式中可以修改全域性變數

內嵌函式

Python支援函式的巢狀

>>> def fun1():
	print('fun1正在被呼叫……')
	def fun2():
		print('fun2正在被呼叫……')
	fun2()

	
>>> fun1()
fun1正在被呼叫……
fun2正在被呼叫……

fun2()函式只能在fun1()內被呼叫,出了fun1()函式,就不能被呼叫

021 函式:lambda表示式

Python寫一些執行指令碼時,使用lambda就可以省下定義函式的過程,不需要專門定義一個函式然後再去呼叫,使用lambda就可以使程式碼更加精煉。

>>> def ds(x):
	return 2*x+1

>>> ds(5)
11
>>> def add(x,y):
	return x+y

>>> add(3,4)
7
>>> lambda x:2*x+1
<function <lambda> at 0x000002724631FCA8>
>>> g=lambda x:2*x+1
>>> g(5)
11
>>> lambda x,y:x+y
<function <lambda> at 0x000002724631FE58>
>>> g=lambda x,y:x+y
>>> g(3,4)
7

兩個厲害的內建函式

  • filter()過濾器:把任何非true的內容過濾掉
>>> list(filter(None,[1,0,False,True]))
[1, True]
//篩選奇數的過濾器
>>> def odd(x):
	return x%2

>>> temp=range(10)
>>> show=filter(odd,temp)
>>> list(show)
[1, 3, 5, 7, 9]
>>> list(filter(lambda x:x%2,range(10)))
[1, 3, 5, 7, 9]
  • map()函式:對序列進行指定加工
>>> list(map(lambda x:x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

022函式:遞迴

遞迴求階乘:
寫一個求階乘函式,例如所給的數是5,則階乘式是1234%,得到的積是120,所以120就是4的階乘

def factorial(n):
    if n==1:
        return 1
    else:
        return n*factorial(n-1)

number=int(input('請輸入一個正整數:'))
result=factorial(number)
print("%d 的階乘是:%d" % (number,result))

023遞迴

斐波那契數列的遞迴實現

def fab(n):
    n1=1
    n2=1
    n3=1

    if n<1:
        print('輸入有誤!')
        return -1
    while (n-2)>0:
        n3=n2+n1
        n1=n2
        n2=n3
        n-=1

    return n3

result=fab(20)
if result!=-1:
    print('第20個數是:%d' % result)
def fab(n):
    if n<1:
        print('輸入有誤!')
        return -1
    if n==1 or n==2:
        return 1
    else:
        return fab(n-1)+fab(n-2)

result=fab(20)
if result!=-1:
    print('第20個數是:%d' % result)