邁向大神的 day008 -01
阿新 • • 發佈:2018-11-09
邁向大神 —1 函式(二)
補充 可讀性強 複用性強
補充
def qqxing(k,l = {}):
# l.append(1)
l[k] = 'v'
print(l)
qqxing(1) #[1]
qqxing(2) #[1,1]
qqxing(3) #[1,1,1]
如果預設引數的值是一個可變資料型別,
那麼每一次呼叫函式的時候,
如果不傳值就公用這個資料型別的資源
名稱空間和作用域
-
全域性名稱空間 在程式從上到下執行的過程中 依次載入記憶體中 –我們寫的程式碼 不是函式中的程式碼
-
區域性名稱空間 函式內部定義的名字 當函式被呼叫 才會產生名稱空間 --* 函式*
-
內建名稱空間 input() python直譯器已啟動就可以使用 內建的名字在啟動時被載入到記憶體裡–python 直譯器
在全域性不能用區域性中使用
import this
p =max([1,2,3])
當我們在全域性定義了和內建名字空間同名的名字是 會使用自己的
函式的記憶體地址() --》》函式呼叫
對於不可變資料型別 在區域性可是檢視全域性作用域中的變數 但是不能更該
若修改需要global
a=1
def func()
global a#可修改全域性(少用不安全) 儘量接收引數 return 返回值
a+=1
print(a)
a=1
def func()
x='aaa'
t='bbb'
print(locals())#區域性名字的所有名字 與所在位置有關係 作用域有哪些名字 #本地的
print(a)
print(globals()) #所有命名的名字
函式的巢狀套用
def max(a,b):
return a if a>b else b;
def max_m(x,y,z):#函式巢狀呼叫
return max(max(x,y),z)
print(max_m(55,6,99))
函式的巢狀定義 排除錯誤從下往上找
def outer():
def inner():
print("you are so beautiful!")
inner()
outer()
#nonlocal a 聲明瞭一個上層的區域性變數名 對區域性最近一層有影響
# a = 1
# def outer():
# a = 1
# def inner():
# a = 2
# def inner2():
# nonlocal a #聲明瞭一個上面第一層區域性變數
# a += 1 #不可變資料型別的修改
# inner2()
# print('##a## : ', a)
# inner()
# print('**a** : ',a)
# outer()
# print('全域性 :',a)
函式名就是記憶體地址 函式名可以賦值 函式名可以作為容器型別的元素 函式名可以作為函式引數 可以作為返回值
函式名就是一類物件
閉包
含義 巢狀函式 內部函式呼叫外部函式的變數
def ouster():
a=1
def inner():
print(a) #呼叫a
print(inenr.__closure__) #顯示 cell 是一個閉包
ouster()
閉包 記住裡面的函式的id 不然它消失 這樣永遠不會消失 延長生命週期
def ouster():
a=1
def inner():
print(a) #呼叫a
return inner #以返回值的形式返回給 outst
print(inenr.__closure__) #顯示 cell 是一個閉包
inn=ouster() #
inn() #外部去使用內部的
#爬蟲
#import urllib #模組
from urllib.request import urlopen
# ret=urlopen('http://www.baidu.com').read()
# print(ret)
def get_url():
url='http://www.baidu.com'
def get():
ret = urlopen(url).read()
print(ret)
return get
get_func=get_url()
三元運算子
c=a if a>b else b
true if 條件 else false