python 難點記錄


1.類 和對象:

1.類對象,實例對象 2.類成員,實例成員 3.類函數,實例函數  ---------- 需要理解之前的關系,能夠相互調用,作用范圍

問題:

#類內
#1.類方法中能否訪問 實例屬性?                                                 不行
#2.類方法總訪問修改類屬性                                                    cls.country
#3.實例方法中能否訪問類屬性?修改類屬性?                            可以,無效  self.county
#4.實例方法中訪問修改實例屬性                                                 self.a
#類外
#1.實例對象能否訪問類屬性?修改類屬性?                               可以,無效
#2.類對象能否訪問實例屬性?                                                    不行
#3.實例對象能否訪問類方法?                                                    可以,可以通過類方法修改類屬性
#4.類對象能否訪問實例方法?                                                    不行

class people:
    country = 'china'           #類屬性
    def __init__(self):
        self.a=100             #實例屬性

    # 類方法,用classmethod來進行修飾
    @classmethod
    def getCountry(cls):
        return cls.country  #---------1.可訪問及修改類屬性
       # cls.a               #---------2.不能訪問實例屬性

    @classmethod
    def setCountry(cls, country):
        cls.country = country #---------1.可訪問及修改類屬性


    #實例方法
    def fun_1(self):
        self.c=500                             #這是實例屬性
        print(self.country)                    #可訪問類屬性,修改類屬性,會生成實例屬性


p = people()
p.b=100
print(p.country)        #類外:實例對象可訪問類屬性,不能修改,修改會生成實例屬性
people.country='chang'  #類外:類對象可訪問及修改類屬性


print(p.a)             #類外:實例對象可訪問修改實例屬性
#print(people.a)        #類外:類對象不可訪問修改實例屬性
#people.b               #b是 p 特有的


p.fun_1()               #實例對象可訪問實例方法
#people.fun_1()         #類對象不可訪問實例方法

print(p.getCountry())        # 類外:實例對象訪問類方法
print(people.getCountry() )  # 類外:類對象訪問類方法

p.setCountry('japan')
people.setCountry('jjj')
print(p.getCountry())
print(people.getCountry()   )

print(p.c)

 

2.python的變量及存儲方式

(轉自http://www.cnblogs.com/Eva-J/p/5534037.html)

 

然后理解變量的賦值,淺拷貝,深拷貝

1.變量的賦值:

1.str的賦值

2.數據結構的賦值

2.淺拷貝:

淺拷貝只會copy一層當sourceLst列表發生變化,copyLst中存儲的lst內存地址沒有改變,所以當lst發生改變的時候,sourceLst和copyLst兩個列表就都發生了改變。這種情況發生在字典套字典、列表套字典、字典套列表,列表套列表,以及各種復雜數據結構的嵌套中,所以當我們的數據類型很復雜的時候,用copy去進行淺拷貝就要非常小心。。。

 

3.深拷貝

深拷貝會完全復制原變量相關的所有數據,在內存中生成一套完全一樣的內容,在這個過程中我們對這兩個變量中的一個進行任意修改都不會影響其他變量

 >>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

 

深度拷貝需要引入 copy 模塊:

實例

>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

3.函數的參數:

  • 1.普通參數:傳參時,需要按照函數定義的參數數量,及類型 進行傳參
  • 2.默認參數:參數寫上默認值,且必須放在所有參數的最后
  • 3.動態參數:
    • def func1(*args) 接受多個參數,內部自動構造元組,序列前加*,會把傳入的參數構造為一個元組 注意:fun() argument after * must be an iterable, not int:數組、字符串、列表都是iterable的
    • def func2(**kwargs) 接收多個參數,內部自動構造字典,序列前加**,直接傳遞字典
      def func3(*args,**kwargs):接受多個參數,既可以自動構造元組,又可以自動構造字典。

  4.函數的返回:返回多個值,以元組的形式返回

例子:

def fun1(*arg):

  print(arg)

a=[1,2,3,4,5]

fun1(*a)---->  輸出結果為:(1,2,3,4,5)   將列表a中的值分別傳入作為元組的元素

fun1(a)---- >  輸出結果為:([1,2,3,4,5],)  將列表a作為一個整體傳入作為元組的元素

  

def fun1(*arg):

  print(arg)

b=[1,2,3,4,5]

c='anna'

fun1(b,*c)#---->  輸出結果為:([1, 2, 3, 4, 5], 'a', 'n', 'n', 'a')

fun1(*b,c)#---- > 輸出結果為:(1, 2, 3, 4, 5, 'anna')

 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

testdata={'k1':'data1','headers':'data2','json';'data3','data':'data4'}

def fun1(**testdata)

  k1data=testdata.get('k1')

  headers=testdata.get('headers')

  json=testdata.get('json‘)

通過字典將值傳遞進去,再使用get函數來一一獲取字典內的值。

 

  

 

需要注意的是必須*args在前**kwargs在后,參數也是一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM