1. 程式人生 > >邁向大神的 day008 -01

邁向大神的 day008 -01

邁向大神 d a y 008 day008 —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