1. 程式人生 > >第六天遞歸、匿名函數、推導式、變量存儲、模塊

第六天遞歸、匿名函數、推導式、變量存儲、模塊

可能 lam def for 引用 修改 周期 聲明 glob

全局變量:生存周期,整個文件;函數內部、外部都能使,在函數前面後面定義都ok
def fun():
print(a+10)
a = 10
fun()

全局變量和局部變量同名:新開辟空間了,並不是重新賦值
a = 10
print(id(a))
def fun():
a = 20
print(id(a))
fun()

global 在函數內部聲明使用的是全局變量,盡可能放上面
下面代碼報錯了、

a = 10
print(id(a))
def fun():
a = 20
print("內20",id(a))
global a
a = 15
print("內15",id(a))
fun()
print(a)
print(id(a))

global b

函數內使用全局變量,如果不用global聲明,則只能使用,不能修改;聲明過之後才能修改

匿名函數:只能做簡單的事,就是個表達式
匿名函數格式:
1、函數名字 = lambda 形參1, 形參2, 形參 ... : 返回值
函數名字(實參1, 實參2, 實參...)
2、實參 = ( lambda 形參1, 形參2, 形參... : 返回值 ) (實參1, 實參2, 實參...)

寫法1:
fun = lambda num1, num2 : num1 + num2
print( fun(num = 1, num= 2))
寫法2:
ret_val = (lambda num1,num2: num1 + num2) (3,4)

print(ret_val)
遞歸關鍵:1、找遞歸的公式 例:4*(n-1)!
2、找遞歸的出口
3、自己調用自己

def step (形參):
#遞歸出口:
if n == 1:
return 1
else:
騷操作
return 公式( 騷操作 運算符 step(對形參的騷操作))
調用step()

for推導式:把for後變量放for()裏循環,然後每次循環得到for前變量,再把for前變量放列表裏
關鍵:for 前的是放列表的,for 後的是放循環體裏的,for外的[] 不要丟
例 把x 放到列表裏循環100次,把i 放到range()裏循環100次
lists = [ x for i in range(1,101)]

for if 推導式: for 的後循環要滿足 if 條件才能得到for 前變量

註:for 前 for 後可以是同一變量
for 後與列表無關可以用來代替
lists = ["*" for
in range(8)]
lists = [2 * i for i in range(1,9)]
lists = [ x for i in range(1,101) if x % 2 ==0]
lists = [ i for i in range(1,101) if i % 2 ==0]
lists = [ i*2 for i in range(1,11) if i % 2 ==0]
混合使用
例:
print((lambda
a:[i**2 for i in a])(2,3,4))

引用
a引用該空間數據

a = 1000
print(id(a))
a = 10 100
print(id(a))
b = 10
print(id(b))
b = 10
10
print(id(b))

a開了倆空間,b開了一個空間
python緩存池:放地址 將-5~256之間的數的地址放入緩存池,用了在取出

str1 = "hellopython"
print(id(str1))
str2 = "hello"+"python"
print(id(str2))
str1 = "hellopythonhello×××"
print(id(str1))
str2 = "hellopython"+"hellopython"
print(id(str2))

python緩存池:放地址 將0~20個字符之間的字符的地址放入緩存池,用了在取出

lists = [10,20,30]
print(id(lists))
lists.append(40)
print(id(lists))
dicts = {"names":"張三"}
print(id(dicts))
dicts["age"] = 18
print(id(dicts))

列表、字典沒有緩存池,列表、字典不管怎麽加,用append/remove等,地址都一樣,不會新開辟;但是,切片和a = [1,2,3],b = [1,2,3] 是新開辟,可用 is 判斷,if a is b,就沒新開辟,如果不是,就新開辟了

可變類型:該類型可以在存儲空間修改內容
不可變類型:該類型不可以在存儲空間修改內容
不可變:int、str、float、tuple

模塊:任意.py文件,要求放同一目錄下,不然不好使,講包之後就好使了。別起中文
使用方法:import 文件名(模塊名,不加.py)
模塊名.函數名
相當於把另外文件所有都拷過來

while True 無限循環,不叫死循環,二者區別:一個故意設的,一個是寫錯了

while 5 也ok,相當於while bool(5),也是True

第六天遞歸、匿名函數、推導式、變量存儲、模塊