函式
- 基礎:定義、引數、返回值
- 進階:
- 預設引數如果是可變型別 : {} [] 集合 內部元素可以被修改的型別 有坑,不建議使用
- 作用域
py:
if 1==1:
name = 'test'
# 等於: test 沒有問題
print name
for i in range(10):
pass
#此時外面是可以使用i,此時值為: 9
print(i)
java:
if (1==1){
String name = 'test';
#可以列印,java 作用域 以 {為分界線}
system.out.println(name);
}
#執行會報錯,不允許
system.out.println(name);
- 閉包
- 裝飾器 @+巢狀的函式 -> 目的,不修改原函式內容的前提下,在函式的執行前後自定義操作
- 內建函式
sum/abs/hex/int/oct/bin/chr/ord/len/rang/id(比較記憶體地址) ....
open -> 檔案操作 ,操作模式有: r (只讀) w(只寫,會將原有資料清空) a(追加) rb wb ab b 表示得到的是原始的2進位制資料
- 生成器函式 (編碼中不常用,原始碼常使用)
- 表象:如果函式中出現了yield關鍵字,就是生成器函式
- 意義: 節省記憶體
- 建立 1~100000 數字時, -> 如果直接在記憶體建立,佔用內容太大
- 建立 1~100000 數字時, ->yield使用過程中,邊使用邊建立
# 傳統函式
def info():
v1 = 100
v2 = 200
return v1, v2
# 定義的函式不會執行,只有呼叫時才會執行 ,函式名後面加 () 表示呼叫
ret = info()
print(ret)
# 1、生成器函式
def info():
v1 = 100
yield v1 + 10
v2 = 200
yield v2 + 10
return v1 + v2
# 2、執行生成器函式,就不會執行函式內部的程式碼,V1=100, v2=200 return 都不會執行,而是直接返回一個生成器物件
ret = info() #
# 此時ret 為 generator object物件
# 3、透過next + 生成器物件,執行函式中的程式碼
# 此時會進入函式內部,先執行v1= 100,然後執行 yield v1 +10 ,一旦執行完yield 表示當前執行已經結束了,
# 當前執行狀態進行凍結,會將後續 yield後續的內容返回
vaule = next(ret)
# 此時vaule的值為:110
print(vaule)
#在次執行next,會接著上次凍結的狀態,繼續往後面走,執行: yield v2 + 10
vaule = next(ret)
# 此時vaule的值為:210
print(vaule)
# 4、執行完畢後,在次執行 next(ret) ,會報錯提示:stopIteration: 表示當前這個生成器執行完了
vaule = next(ret)
# 報錯StopIteration: 300
print(vaule)
# 解決:會報錯提示:stopIteration 報錯方法
def info():
v1 = 100
yield v1 + 10
v2 = 200
yield v2 + 10
return v1 + v2
#ret生成器物件
ret = info()
for item in ret:
print(item)