重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
params
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站制作、永嘉网络推广、小程序开发、永嘉网络营销、永嘉企业策划、永嘉品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供永嘉建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
就是(5, 5)
(5,) * 2 ,就是2个5的元组,乘号可以理解成相加。"*" * 30就是30个“*"的字符串
*params作为参数,前面的*号就是把params元组分解成元素的意思,这样就分开成为2个参数了。实际上传递给了x,y
于是就执行了power(5,5)
__call__
在Python中,函数其实是一个对象:
f = abs
f.__name__
'abs'
f(-123)
由于 f 可以被调用,所以,f 被称为可调用对象。
所有的函数都是可调用对象。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
我们把 Person 类变成一个可调用对象:
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
现在可以对 Person 实例直接调用:
p = Person('Bob', 'male')
p('Tim')
My name is Bob...
My friend is Tim...
单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。
任务
改进一下前面定义的斐波那契数列:
class Fib(object):
???
请加一个__call__方法,让调用更简单:
f = Fib()
print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
答案:python中mydf是自定义函数(或过程)或自定义变量,具体要看例子。
#例子:
①mydf="45555":print(mydf)#变量
②def mydf(x):#函数
return x
③def mydf():#过程
x=input("x=")
print(x)
my_df是一个二维的结构,如下图所示:
stack函数会把列索引转成行索引,即把列索引换成二级的行索引,即所有列压缩到一列。请注意,这个的空值会跳过,下图中的数据结构只有7个元素,7行1列。
a['b','two']
a['d','two']
#上面两个索引是可以的,下面的是会报错KeyError
a['d','one']
unstack函数会把行索引转成列索引,即把行索引换成二级的列索引,即所有行压缩到一行。注:实际上,Python似乎不分行向量或列向量,如果对一个Series对象进行转置,则还是其本身。根据shape函数的返回可知,这是一个8行1列的数据结构。
stack函数会把二级的行索引转成列索引,恢复其二维结构。
我们看到,用过stack函数后可以用unstack函数来恢复其原貌。反过来如何呢?
会报错:AttributeError: 'Series' object has no attribute 'stack'
我们发现,stack和unstack两个函数的组合,如下所示,只有前两个是可以的没有问题的。这是因为一个二维数据经过stack或unstack后,变成了一个Series结构,而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后,怎么恢复原状呢?转置一下即可。