
" 如果是為了我所愛的人、我愿戴上這罪惡之冠 "
Python基礎(內容基于邏輯教育Cheney課程)
- 1、函式
- 1.1、函式的回傳值
- 1.2、函式的嵌套
- 1.3、函式不寫return或其后不跟資料
- 1.4、函式return后面的代碼不會執行
- 2、檔案字串
- 3、函式的作用域
- 4、命名空間
- 5、遞回函式
- 5.1、求10的階乘
- 5.2、求n的m次冪
- 5.3、判斷回文字串
- 6、程式舉例
- 6.1、題一
- 6.2、題二
1、函式
1.1、函式的回傳值
函式的回傳值(原因及特點)
- 想拿到函式的運行結果、而不是單純的列印這個結果
- 必須寫 return xxx
- 如果寫 return 和什么都不寫、函式的回傳值是None
- 函式的呼叫等于函式的回傳值
- 任何型別的值都可以作為函式的回傳值來回傳
@1
# 在主函式里用一個變數來接收函式的回傳值
def fun(*a):
r = 0
for i in a:
r += i
return r
result = fun(1,2,3,4)
# 再去對變數做操作
result += 4
print(result)
輸出:14
1.2、函式的嵌套
- print函式輸出fun1()、回傳值為fun2、然后呼叫fun2()、輸出111
- @1 fun2()沒有回傳值、所以作為空處理(None)
- @2 fun2()有回傳值、回傳其回傳值(112)
@1
def fun1():
def fun2():
print(111)
return fun2
print(fun1()())
輸出:
111
None
@2
def fun1():
def fun2():
print(111)
return 112
return fun2
print(fun1()())
輸出:
111
112
1.3、函式不寫return或其后不跟資料
@1
def fun():
return
print(fun())
輸出:None
@2
def fun():
pass
print(fun())
輸出:None
1.4、函式return后面的代碼不會執行
def fun():
return 1
print(111)
print(fun())
輸出:1
2、檔案字串
檔案字串
- help()是Python中的內置函式、通過help()可以直接查詢Python中函式的用法
- 函式 .__ doc __的方法也可以查詢檔案字串資訊
- 在定義函式時、可以在函式內部撰寫檔案字串、檔案字串就是對函式的說明
def printMax(x,y):
'''
列印兩個數中的最大值,
兩個值必須都是在整型數,
'''
x = int(x)
y = int(y)
if x > y:
print(x,'最大')
else:
print(y,'最大')
@1
printMax(3,5)
@2
print(printMax.__doc__)
@3
help(printMax)
輸出:
@1
5 最大
@2
列印兩個數中的最大值,
兩個值必須都是在整型數,
@3
Help on function printMax in module __main__:
printMax(x, y)
列印兩個數中的最大值,
兩個值必須都是在整型數,
3、函式的作用域
函式的作用域
- 作用域指的是變數生效的區域
- Python中分為二種作用域
- 全域作用域和函式作用域
全域作用域
- 全域作用域在程式執行時創建、在程式結束時銷毀
- 所有函式以外區域都是全域作用域
- 在全域作用域中定義的變數都是全域變數
- 全域變數可以在程式的任意位置訪問
函式作用域
- 函式作用域在函式呼叫時創建、在函式結束呼叫時銷毀
- 函式每呼叫一次就會產生一個新的函式作用域
- 在函式作用域中定義的變數、都是區域變數、只能在函式內部被訪問
@1 在函式內宣告全域變數
def fun1():
global a
a = 20
def fun2():
print(a)
fun2()
fun1()
print(a)
輸出:
20
20
4、命名空間
命名空間
- 命名空間實際上就是一個字典、是一個專門用來存盤變數的字典
- local()用來獲取當前作用域的命名空間
- 如果在全域作用域中呼叫local()則獲取全域命名空間
- 如果在函式作用域中呼叫local()則獲取函式命名空間
- 回傳值是一個字典
@1 獲取全域命名空間
a = 1
b = 2
c = 3
d = 4
print(locals())
輸出:
{...,'a': 1, 'b': 2, 'c': 3, 'd': 4}
@2 獲取函式命名空間
def fun():
a = 1
b = 2
c = 3
d = 4
space = locals()
print(space)
fun()
輸出:{'d': 4, 'c': 3, 'b': 2, 'a': 1}
@3 獲取函式內的全域命名空間
e = 5
def fun():
a = 1
b = 2
c = 3
d = 4
space = globals()
print(space)
fun()
輸出:{..., 'e': 5}
5、遞回函式
遞回函式
- 遞回是解決問題的一種方式
- 整體思想是將一個大問題分解為一個個小的問題
- 直到問題無法分解時、再去解決問題
- 二個條件(基線條件和遞回條件)
- 基線條件、問題可以被分解為最小問題
- 遞回條件、可以將問題繼續分解的條件
5.1、求10的階乘
@1 普通函式
def fun(a):
for i in range(1,10):
a *= i
return a
print(fun(10))
輸出:3628800
@2 遞回函式
def fun(n):
# 基線條件
if n == 1:
return 1
else:
# 遞回條件
return n * fun(n - 1)
print(fun(10))
輸出:3628800
5.2、求n的m次冪
@1 普通函式
def fun(n,m):
for i in range(1,m):
n *= n
return n
print(fun(5,2))
輸出:25
@2 遞回函式
def fun(n,m):
if m == 1:
# 基線條件
return n
else:
# 遞回條件
return n * fun(n,m-1)
return n
print(fun(5,3))
輸出:125
5.3、判斷回文字串
def fun(a):
# 基線條件
if len(a) == 1 or len(a) == 0:
return True
elif a[0] != a[-1]:
return False
# 遞回條件
return fun(a[1:-1])
a = input(":")
if len(a) < 2:
print("too short")
else:
print(fun(a))
6、程式舉例
6.1、題一
# 用函式實作一個判斷用戶輸入的年份是否是閏年的程式
# 1.能被400整除的年份
# 2.能被4整除、但是不能被100整除的年份
# 以上方法滿足一種即為閏年
def fun(n):
if n % 400 == 0 or (n % 4 == 0 and n % 100 != 0):
print("閏年")
else:
print("非閏年")
fun(2015)
fun(2000)
fun(2016)
輸出:
非閏年
閏年
閏年
6.2、題二
# 猴子吃桃問題(遞回)
# 猴子第一天摘下若干個桃子、當即吃了一半、還不癮、又多吃了一個
# 第二天早上又將剩下的桃子吃掉了一半、又多吃了一個
# 以后每天早上都吃了前一天剩的一半加上一個
# 第十天早上再吃的時候、見只剩一個桃子
# 求一共摘了多少桃子
def monkey_tao(n):
if n>10 or n<1:
return
elif n==10:
return 1
else:
return (monkey_tao(n+1)+1)*2
print (monkey_tao(1))
輸出:1534
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/256804.html
標籤:python
