一、 python 函數 的參數傳遞html
a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.append(1) fun(a) print a # [1]
主要有兩總結 :1變量是對實際內存對象的一個引用,變量的值和類型取決於實際被引用的對象。python
二、python函數的參數,若是是一個外部變量,會複製一個對同一個對象的引用,這個局部變量的引用是和外部的引用沒有任何關係的,express
若是隻是對外部變量進行引用,那就是引用的同一個對象。若是發生了賦值,這個引用就指向了另外的對象。若是是操做,對引用對象的值發生改變,編程
要看引用對象是可變類型仍是不可變類型,若是是可變的,仍是引用的同一個對象,只是對象的值發生改變了,若是是字符串、元組、數字等不可變數據類型,閉包
發生修改,其實是會產生一個新的內存對象。app
二、python 的metaclass 要看一下函數式編程
三、關於python類變量一個實例的解釋函數
class Person: name="aaa" p1=Person() p2=Person() p1.name="bbb" print p1.name # bbb print p2.name # aaa print Person.name # aaa
咱們一直在強調引用,確實沒錯,可是對於上面這問題,咱們看,他是否是已經該變量類變量name的引用呢,其實整個過程是這樣的,他如今本身實例空間中聲明一個name,而後根據這個去查找,類中有沒有相同的變臉,若是有就複製一份這個引用,給我本身聲明的name,若是沒有就報錯 , 這個時候是能夠給本身空間的這個name變量,從新附一個值,也就是產生了一個新的對象引用。因此,這個是不會改變類變量中的name的引用的。spa
五、python自省 :指的是python的代碼在執行過程當中,能夠知道對象的類型,例如 ,type()方法 ,isintance() 方法。htm
六、字段推導式 {expression(k) :expression(v) for k , v in dict.items() conditon },老是字典推導式是和列表推導式的用法是一致的。
九、什麼是AOP ,就是動態的將代碼切入到,類的指定方法中的編程思想,叫作切面編程。AOP。 直白一點就是在類的方法上裝一個decorator
10.函數重載,python不支持函數重載
函數重載是用來作什麼的?
一、同一個函數,不一樣的參數的類型(同一段函數代碼),可能產生的結果是不同的。這樣須要函數重載
二、同一個函數,不一樣的參數個數。
基於以上兩點,咱們用python來分析一下,第一python是動態性語言,就是python的變量引用對象的數據類型,是在代碼執行過程當中確認的,因此說,函數中的參數是能夠接受任意的數據類型的,而咱們說過函數重載是具備相同的代碼,那麼對於python來說,就是沒有意義了。徹底不須要寫兩個同名函數。
第二點,同一個函數,不一樣的參數個數,python是有不固定參數的,也就是*args,**kwargs。這個兩個不固定長度參數,能夠解決此問題。
十一、python 變量的查找範圍,分別是內部做用域 -》函數閉包-》全局做用域-》內建做用域
十二、關於函數式編程
這個在python中是有引用的,
第一,python的decorator的實現過程就是用到了函數式編程中的定義,就是函數也是對象,函數名是對整個函數體的一個引用,函數名能夠作爲其餘函數的參數和返回值
第二,是是關於三個內置函數,一個reduce ,map,還有一個filter。
filter 和map的函數形式相同 ,哪map舉例 map(fucntion , sequence),第一個參數是一個函數 , 第二個參數是一個可迭代對象。以下:
關於reduce,這個函數,和前面兩個稍有不一樣, reduce(function , iterable) ,就是reduce中的函數中必需要有兩個參數,會先去,後面iterable中的前兩個元素,如今函數中作計算,而後,在用第三個元素,和前兩個元素計算出來的值進行計算
以下:
1三、關於容器類對象的deepcopy和淺copy