小甲魚python疑難點
1.python生成器
2.while 1:
num = input(‘請輸入一個整數(輸入Q結束程序):‘)
if num != ‘Q‘:
num = int(num)
print(‘十進制 -> 十六進制 : %d -> 0x%x‘ % (num, num))
print(‘十進制 -> 八進制 : %d -> 0o%o‘ % (num, num))
print(‘十進制 -> 二進制 : %d -> ‘ % num, bin(num))
else:
break
十進制到二進制怎麽實現的
3.
當時的解釋:大佬說-->比如說函數計算的值在函數外面要用,那麽必須加return
4.
大佬解釋:return語句[表達式]退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。不帶return就默認返回None。帶return就是就返回return後面的表達式。None是不能做賦值右值的。單單的funY只是一個函數對象,因為funY後面有個(),就代表funY被調用的。
我的理解:有return的時候表示調用該函數並返回該函數一個值,沒有return的時候只是起到調用這個函數,返回的值是默認的none。都有結束函數的意思。
*、用dir(classname)查看類中有哪些東西
用dir(instance)查看實例中有哪些東西
用__dict__查看有哪些屬性
用id()查看哪些屬性一樣
我通過一系列測試得出結論:
類中的所有東西都“復制”實例中了包括類函數,靜態函數,類變量,其實能通過實例調用相同名字的類變量
instance__class__.value
另外self是用來進行綁定用的,這點可以通過直接打印函數名能夠看到哪個類的對象被綁定
另外還有繼承,也可以用上述方法研究看看這些父類子類中到底有哪些東西:其實父類中所有的東西也都復制到子類中了,正是有了顯示綁定才能方便的用子類實例調用父類的方法:應為子類實例綁定了父類函數
說到底,都是python的設計哲學比較好,能夠用一些方法清楚的看到所有的東西,比起java來說迷迷糊糊的只能看資料了解哪些類中有什麽東西,繼承時,創建實例時發生了什麽改變。
*、 Python裏面類之間的關系可以是縱向關系,采用繼承機制可以將基類裏面的屬性和方法全部被子類使用,而父類卻不可以使用子類的方法和屬性,例如魚和鯊魚、鯉魚三文魚之間的關系等;當然類之間也可以是橫向關系,可以通過實例化一個類的對象來作為另一類的屬性來實現類之間的調用關系,例如池塘和池塘內的魚和烏龜之間的關系等,舉例說明:
>>> class Turtle:
def __init__(self,x):
self.x = x
>>> class Fish:
def __init__(self,y):
self.y = y
>>> class Pool:
def __init__(self,x,y):
self.turtle = Turtle(x) #將Turtle類實例化的對象turtle作為類Pool實例化對象的屬性
self.fish = Fish(y) #將Fish類實例化的對象fish作為類Pool實例化對象的屬性
def printnum(self):
print(‘池塘內的烏龜有%d 只,小魚有 %d 條!‘ %(self.turtle.x,self.fish.y))
>>> pool = Pool(2,10)
>>> pool.printnum()
池塘內的烏龜有 2 只,小魚有 10 條!
*、
解釋:
解釋:表示false,但不等於false
*修飾符(裝飾器)
*小甲魚:class CapStr(str): -----》
def __new__(cls,string):
string=string.upper()
return str.__new__(cls,string)
錯誤: class CapStr(str):
def __new__(cls,string):
string=string.upper()
return str.__new__(cls,string)
def __init(self,string):
self.x=string
cs=CapStr(‘I love You‘)
cs.x
解釋:小甲魚這裏只是舉例說明__new__(cls)這個特殊方法的用法。在視頻和書中都明確說明了絕大多數情況都不需要去改寫這個特殊方法的。只有當類繼承自另一個不可變類的時候才需要去改寫。 |
*①__metaclass__=type
class CapString(str):
def __new__(cls,string):
string=string.upper()
return str.__new__(cls,string)
②class CapString(str):
def __new__(cls,string):
return string.upper()
解釋:return string.upper() 是把計算好的結果 自己返回
return str.__new__(cls,string) 是把結果交給父類str處理返回(這樣是為是防止不必要的錯誤發生)
再看看__new__的說明
1. __new__ 是在一個對象實例化的時候所調用的第一個方法
2. 它的第一個參數是這個類,其他的參數是用來直接傳遞給 __init__ 方法
3. __new__ 決定是否要使用該 __init__ 方法,因為 __new__ 可以調用其他類的構造方法或者直接返回別的實例對象來作為本類的實例,如果 __new__ 沒有返回實例對象,則 __init__ 不會被調用
4. __new__ 主要是用於繼承一個不可變的類型比如一個 tuple 或者 string
*
*
*、怎麽在shell裏改name
解釋:類Record()的實例對象沒有返回值,這樣子寫的話x是屬於類的屬性,在創建的時候就已經被賦值了,賦的值就是那個返回值。
也就是這個樣子,這個x已經是‘你好‘了,然而‘你好‘是沒有 name 這個屬性的,
初始化的話這個x指向的是類Record() ,這時候的self.x是一個類Record()的實例對象,所以有 name 這個屬性。
*
解釋:淺拷貝,淺拷貝只拷貝父對象,不拷貝裏面的子對象。
http://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
*
解釋: ip==》119.113.112.332
*
解釋:表達式裏面有幾組括號?只有一組。+號在括號外面。括號最多匹配到一個字符,要麽是a, 要麽是c,re 在單次搜索中如果命中多個分組,自保留最後的分組。他其實是匹配了a,b,c,但是c是最後匹配的,又因為只能匹配一個字符,c又把前面的覆蓋了,所以為c。
擴展:
m.group() == m.group(0) 這個返回的是整個匹配的字符串"abc"
小甲魚python疑難點