params
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都做網(wǎng)站、網(wǎng)站制作、永嘉網(wǎng)絡推廣、小程序開發(fā)、永嘉網(wǎng)絡營銷、永嘉企業(yè)策劃、永嘉品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供永嘉建站搭建服務,24小時服務熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
就是(5, 5)
(5,) * 2 ,就是2個5的元組,乘號可以理解成相加。"*" * 30就是30個“*"的字符串
*params作為參數(shù),前面的*號就是把params元組分解成元素的意思,這樣就分開成為2個參數(shù)了。實際上傳遞給了x,y
于是就執(zhí)行了power(5,5)
__call__
在Python中,函數(shù)其實是一個對象:
f = abs
f.__name__
'abs'
f(-123)
由于 f 可以被調(diào)用,所以,f 被稱為可調(diào)用對象。
所有的函數(shù)都是可調(diào)用對象。
一個類實例也可以變成一個可調(diào)用對象,只需要實現(xiàn)一個特殊方法__call__()。
我們把 Person 類變成一個可調(diào)用對象:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __call__(self, friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend
現(xiàn)在可以對 Person 實例直接調(diào)用:
p = Person('Bob', 'male')
p('Tim')
My name is Bob...
My friend is Tim...
單看 p('Tim') 你無法確定 p 是一個函數(shù)還是一個類實例,所以,在Python中,函數(shù)也是對象,對象和函數(shù)的區(qū)別并不顯著。
任務
改進一下前面定義的斐波那契數(shù)列:
class Fib(object):
???
請加一個__call__方法,讓調(diào)用更簡單:
f = Fib()
print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
答案:python中mydf是自定義函數(shù)(或過程)或自定義變量,具體要看例子。
#例子:
①mydf="45555":print(mydf)#變量
②def mydf(x):#函數(shù)
return x
③def mydf():#過程
x=input("x=")
print(x)
my_df是一個二維的結(jié)構(gòu),如下圖所示:
stack函數(shù)會把列索引轉(zhuǎn)成行索引,即把列索引換成二級的行索引,即所有列壓縮到一列。請注意,這個的空值會跳過,下圖中的數(shù)據(jù)結(jié)構(gòu)只有7個元素,7行1列。
a['b','two']
a['d','two']
#上面兩個索引是可以的,下面的是會報錯KeyError
a['d','one']
unstack函數(shù)會把行索引轉(zhuǎn)成列索引,即把行索引換成二級的列索引,即所有行壓縮到一行。注:實際上,Python似乎不分行向量或列向量,如果對一個Series對象進行轉(zhuǎn)置,則還是其本身。根據(jù)shape函數(shù)的返回可知,這是一個8行1列的數(shù)據(jù)結(jié)構(gòu)。
stack函數(shù)會把二級的行索引轉(zhuǎn)成列索引,恢復其二維結(jié)構(gòu)。
我們看到,用過stack函數(shù)后可以用unstack函數(shù)來恢復其原貌。反過來如何呢?
會報錯:AttributeError: 'Series' object has no attribute 'stack'
我們發(fā)現(xiàn),stack和unstack兩個函數(shù)的組合,如下所示,只有前兩個是可以的沒有問題的。這是因為一個二維數(shù)據(jù)經(jīng)過stack或unstack后,變成了一個Series結(jié)構(gòu),而Series有unstack沒有stack。
my_df.stack().unstack()
my_df.unstack().unstack()
#my_df.stack().stack()
#my_df.unstack().stack()
a=my_df.stack()
print(type(a))
print(dir(a))
如下圖所示,用過了unstack后,怎么恢復原狀呢?轉(zhuǎn)置一下即可。