亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python面向?qū)ο笾刑厥庾兞縨ain,name以及關(guān)于self的一系列問(wèn)題

系統(tǒng) 1772 0

回過(guò)頭去敲循環(huán)語(yǔ)句的時(shí)候,我又碰到了問(wèn)題:

var = 1
while var == 1:
... num = int(input("輸入一個(gè)數(shù)字 :"))
... print("你輸入的數(shù)字是: ", num)
...
輸入一個(gè)數(shù)字 :4
你輸入的數(shù)字是: 4
輸入一個(gè)數(shù)字 :7
你輸入的數(shù)字是: 7
輸入一個(gè)數(shù)字 :7.8
Traceback (most recent call last):
File " ", line 2, in
ValueError: invalid literal for int() with base 10: '7.8'

首先input函數(shù)永遠(yuǎn)返回一個(gè)str類(lèi)型:

a=input("input: ")
input: 6
type(a)

b=input("input: ")
input: 8.9
type(b)

而Int()函數(shù)就很神奇,它可以把一個(gè)str類(lèi)型或者一個(gè)number轉(zhuǎn)換成一個(gè)整數(shù):

int(3.4)
3
int('100')
100
int('2.3')
Traceback (most recent call last):
File " ", line 1, in
ValueError: invalid literal for int() with base 10: '2.3'
int('air')
Traceback (most recent call last):
File " ", line 1, in
ValueError: invalid literal for int() with base 10: 'air'
int(float('2.3'))
2

int()函數(shù)應(yīng)該只能將擁有表面意義的字符串直接轉(zhuǎn)化成整數(shù),也就是說(shuō)int函數(shù)是個(gè)封裝,里面應(yīng)該是有一個(gè)內(nèi)置函數(shù)把str轉(zhuǎn)化成ASCII或者別的啥我也不知道。
而int函數(shù)只能把要轉(zhuǎn)化的string轉(zhuǎn)化成一個(gè)十進(jìn)制的數(shù),這也就是為什么air無(wú)法轉(zhuǎn)化成數(shù)字:a對(duì)應(yīng)了ASCII中的97,97不在0-9之間,大于9的數(shù)對(duì)int來(lái)說(shuō)就是invalid的。
為了驗(yàn)證猜想,可以調(diào)用int函數(shù)的另一個(gè)功能:

int(12,16)
Traceback (most recent call last):
File " ", line 1, in
TypeError: int() can't convert non-string with explicit base
int('12',16)
18

只有當(dāng)輸入是一個(gè)字符串的時(shí)候,他才能把16進(jìn)制的12轉(zhuǎn)化成10進(jìn)制的18。因?yàn)閕nt函數(shù)里只設(shè)置了一個(gè)內(nèi)置函數(shù)(一個(gè)能將字符串轉(zhuǎn)化成ASCII碼之類(lèi)的東西再把ASCII碼轉(zhuǎn)回來(lái)的函數(shù))。

然后我開(kāi)始學(xué)習(xí)了正則表達(dá)式和面向?qū)ο?正則表達(dá)式...可能因?yàn)闁|西太多了我沒(méi)啥筆記,面向?qū)ο缶瓦€是有一點(diǎn)點(diǎn)的:

class Test:
... def ppr(self):
... print(self)
... print(self.__class__)
...
t=Test()
t.ppr()
<__main__.Test object at 0x0000019F9A9EA908>

挺簡(jiǎn)單的,就是self指一個(gè)實(shí)例,ppr這個(gè)方法里面的print(self)返回了self這個(gè)實(shí)例的地址;self.__class__則返回了一個(gè)類(lèi),可以看出Test就是那個(gè)類(lèi).main應(yīng)該就是所有東西調(diào)用的地方
以__class__,__main__為代表的以雙下劃線(xiàn)為開(kāi)頭雙下劃線(xiàn)結(jié)尾的特殊變量(可以直接訪(fǎng)問(wèn)的變量)。__class__是什么很好理解,它指向類(lèi),在這里應(yīng)當(dāng)是Test這個(gè)類(lèi)。然而這個(gè)__main__在查了document之后解釋為:the environment where the top-level script is run. The name of the scope in which top-level code executes. A module's __name__is set equal to "__main__" when read from standard input, a script or from an interactive prompt.看上去這個(gè)__main__的出現(xiàn)似乎之和運(yùn)行方式有關(guān)。
__name__is a built-in variable which evaluates to the name of the current module.
(大型偷懶現(xiàn)場(chǎng))
https://stackoverflow.com/que...
https://www.geeksforgeeks.org...
https://www.journaldev.com/17...
前兩個(gè)講了__main__和以及和__name__的關(guān)系,第三個(gè)鏈接講述main函數(shù)

感覺(jué)今天腦子不轉(zhuǎn)了:

class A(object):
... def f(self):
... return 123
...
a=A()
print (A.f())
Traceback (most recent call last):
File " ", line 1, in
TypeError: f() missing 1 required positional argument: 'self'
print (a.f())
123

第一個(gè)A.f()我以為它是一個(gè)類(lèi)方法,它卻返回我缺少位置參數(shù)self,self在我眼中代表了一個(gè)實(shí)例,這不是說(shuō)明我缺少了一個(gè)實(shí)例作為參數(shù),也就是說(shuō)這個(gè)A.f()實(shí)際是A.f(self)而這個(gè)self需要的是一個(gè)像a一樣的實(shí)例?
a.f()是一個(gè)方法,但要是前面的假設(shè)是正確的,那么它其實(shí)應(yīng)該是A.f(a)
對(duì)我看到了這個(gè):

class Test:
... def ppr():
... print(self)
...
t=Test()
t.ppr()
Traceback (most recent call last):
File " ", line 1, in
TypeError: ppr() takes 0 positional arguments but 1 was given

也就是說(shuō)在定義ppr的時(shí)候沒(méi)有給self,而t.ppr()在內(nèi)部處理的時(shí)候變成了Test.ppr(t),因?yàn)闆](méi)有定義參數(shù),所以括號(hào)里并不應(yīng)該給一個(gè)變量,所以出現(xiàn)了這個(gè)提示。
再加上self:

class Test:
... def ppr(self):
... print(self)
...
t=Test()
t.ppr()
<__main__.Test object at 0x00000241F67CB848>
t.ppr(3)
Traceback (most recent call last):
File " ", line 1, in
TypeError: ppr() takes 1 positional argument but 2 were given
t.ppr()=Test.ppr(t),實(shí)例地址在0x00000241F67CB848,嗯很完美
t.ppr(3)=Test.ppr(t,3),多給了一個(gè)變量,所以提示只需要一個(gè)但是給了兩個(gè)。

這是問(wèn)題的前一半,我留了后一半打算慢慢想,因?yàn)槲以嚵烁鞣N組合發(fā)現(xiàn)如下:

class Test:
... def ppr(self):
... print(self)
...
t=Test()
Test.ppr

t.ppr
<__main__.Test object at 0x00000241F67CBA48>>
t.ppr()
<__main__.Test object at 0x00000241F67CBA48>

Test.ppr顯然是一個(gè)類(lèi)方法,但是返回了一個(gè)function,或許python中把方法當(dāng)成了一種特殊函數(shù)處理(保留問(wèn)題)?
t.ppr和t.ppr()返回了同一個(gè)地址但是前者返回了綁定了實(shí)例的方法的的地址,
后者加了括號(hào),返回的是這個(gè)方法的結(jié)果,即self的地址,兩個(gè)地址是相同的,也沒(méi)什么問(wèn)題
再試一個(gè):

class A(object):
... def f(self):
... return 123
...
A.f

A.f()
Traceback (most recent call last):
File " ", line 1, in
TypeError: f() missing 1 required positional argument: 'self'
a=A()
a.f
<__main__.A object at 0x0000027D9CD9C988>>
a.f()
123

a.f返回綁定了實(shí)例的方法所在地址,a.f()在這里更直觀一些返回了方法的結(jié)果,也沒(méi)有問(wèn)題
那么今天就遺留了一個(gè)為什么A.f是一個(gè)function而不是一個(gè)method的問(wèn)題。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99久9在线 | 免费 | 色天天综合久久久久综合片 | 一区在线观看 | 国产欧美在线观看一区二区 | 久色伊人| 亚欧洲精品bb | 亚洲日本人成网站在线观看 | 日本a∨在线 | 香蕉人精品视频多人免费永久视频 | 欧美视频在线一区 | 黄色片在线观看网址 | 国产福利视频一区美女 | 四虎最新网址入口 | 妖精www视频在线观看高清 | 欧美成人精品福利在线视频 | 久久免费观看视频 | 99热精品在线观看 | 999精品久久久中文字幕蜜桃 | 一级毛片在线观看视频 | 天天上天天操 | 欧美亚洲欧美日韩中文二区 | 亚洲精品第一国产综合高清 | 中国精品白嫩bbwbbw | 欧美激情在线免费观看 | 黄黄的网站在线观看 | 国产精品毛片久久久久久久 | a亚洲欧美中文日韩在线v日本 | 日韩 欧美 中文 | 欧美激情在线观看一区二区三区 | 99视频精品全国在线观看 | 亚欧毛片基地国产毛片基地 | 岛国不卡 | 日日拍夜夜嗷嗷叫狠狠 | 日本亚洲欧美国产日韩ay高清 | 国产91在线chines看 | 波多野结衣高清在线播放 | 日本亚洲一区二区 | 免费一级片 | 国产高清精品91在线 | 色综合五月激情综合色一区 | 久久99热这里只有精品国产 |