python的访问器方法有哪些

Python027

python的访问器方法有哪些,第1张

使用方法

class A(object): def foo(self,x): #类实例方法 print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): #类方法 print "executing class_foo(%s,%s)"%(cls,x) @staticmethod def static_foo(x): #静态方法 print "executing static_foo(%s)"%x调用方法:

a = A() a.foo(1) //print : executing foo(<__main__.A object at 0xb77d67ec>,1) a.class_foo(1)//executing class_foo(<class '__main__.A'>,1) A.class_foo(1)//executing class_foo(<class '__main__.A'>,1)a.static_foo(1)//executing static_foo(1) A.static_foo(1) //executing static_foo(1)类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用。

类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数。

python内置关于排序的工具主要有两个一个是列表自带的 sort() 方法,另外一个是 sorted() 函数。Python 列表内置方法可以直接修改列表。而 sorted() 内置函数从一个可迭代对象(列表,元组等都可以)构建一个新的排序列表。其函数原型分别如下:

对列表进行默认排序

从函数原型来看,可以看到两者都具有两个可选参数,它们都必须指定为关键字参数。

key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。默认值为 None (直接比较元素)。 key 形参的值应该是个函数(或其他可调用对象),它接受一个参数并返回一个用于排序的键。

假设有其他类型的变量,比如一个自定义的类或者列表中又是一个列表。以官网例子为例有这样一个列表,其元素为元组,

可以用以下方式按照年龄排序

类似的有自定义类

可以用如下方式进行排序

也可以显示定义一个函数,且只有一个参数,返回用于排序的键,比如

总之就是定义一个函数返回一个用于排序的键,可以用lambda函数或者 def 定义都可以。

上面实现的简单函数实际就是实现了返回一个有序结构的第 n 的元素,或者某个类中的某个属性,因此 Python 提供了便利功能,使访问器功能更容易,更快捷。operator 模块有 itemgetter() 、 attrgetter() 函数。分别完成返回第 n 个元素,某个属性功能。上面的排序可以用如下方式进行实现

在python2中,sort有一个 cmp 参数,即用一个函数来自定义比较,在python3中这种方式被取消。为了继承类似的用法,在 Python 3.2 中, functools.cmp_to_key() 函数被添加到标准库中的 functools 模块中。

这种作用先定义如何比较两个变量,以上面的学生列表按照年龄排序为例

这种做法自定义比较函数接收两个形参,返回比较结果(bool),而新式方法接受一个参数,返回的是比较的键。

假设有字典 d = {'b':2, 'a':1,'c':8,'d':4} ,则可以通过以下方式对字典按照键和值进行排序

在 pandas 中,存储文本主要有两种方式

但一般建议使用 StringDtype 类型存储文本数据。都是由于各种原因,现在字符串数据的默认存储类型还是 object 。

要存储为 string 类型,需要显式的设置 dtype 参数

或者在创建 Series 或 DataFrame 之后,使用 astype 转换类型

也可以使用 StringDtype/"string" 转换其他非字符串类型的数据

转换现有数据的类型

StringDtype 类型对象与 object 类型之间存在一些差异

两个结果的输出都是 Int64 类型。将其与 object 类型比较

当存在 NA 值时,输出为 float64 。类似地,对于返回布尔值的方法

Series 和 Index 有一套字符串处理方法,可以方便地对数组的每个元素进行操作,最重要的是,这些方法会自动忽略缺失值。

这些方法可以通过 str 属性访问,通常具有与内置字符串方法相匹配的名称

Index 上的字符串方法对于清理或转换 DataFrame 的列特别有用。

例如,您可能有带有前导或后置空格的列

因为 df.columns 是一个 Index 对象,所以我们可以使用 .str 访问器

我们可以根据需要对列名进行处理,然后重新设置列名。

例如,我们删除列名的前后空格,并将其改为小写字母,同时用 _ 替换剩余的空格

split 方法会返回一个值为 list 的 Series

可以使用 get 或 [] 访问拆分后的列表中的元素

更简单的方法是设置 expand 参数,返回一个 DataFrame

当原来的 Series 包含 StringDtype 类型的数据时,输出列也将全部为 StringDtype

当然,也可以设置切割次数

它还有个对应的 rsplit 方法,从右边起始对字符串进行拆分

replace 参数支持使用正则表达式,前两个参数是 pat (匹配模式) 和 repl (替换字符串)

如果只是想要替换字符串字面值,可以将 regex 参数设置为 False ,而不需要对每个特殊字符进行转义。此时 pat 和 repl 参数必须是字符串

此外, replace 方法还接受一个可调用的替换函数,会使用 re.sub() 方法在每个匹配的模式上调用该函数

该函数需要传入一个正则对象作为位置参数,并返回一个字符串。例如

replace 方法的 pat 参数还接受 re.compile() 编译的正则表达式对象。所有的 flags 需要在编译正则对象时设置

如果在 replace 中设置 flags 参数,则会抛出异常

有几种方法可以将一个 Series 或 Index 与自己或其他的 Series 或 Index 相连接,所有这些方法都是基于 cat() 方法

可以连接一个 Series 或 Index 的内容

如果未指定 sep 参数,则默认为空字符串

默认会跳过缺失值,也可以使用 na_rep 指定缺失值的表示方式

cat() 的第一个参数 others 可以是类似列表的对象,但是其长度需要和调用对象一致

只要两个对象中存在缺失值,对应的结果中也是缺失值,除非指定了 na_rep

others 参数也可以是二维的,但是得保证其行数必须与调用的对象一致

对于 Series 或 DataFrame 的连接,可以通过设置 join 参数指定对齐方式

通常 join 可选范围为: 'left' , 'outer' , 'inner' , 'right' 。此时,不再要求两个对象长度一致

当 others 参数是 DataFrame 时,也可以使用

可以将一些类似数组的对象(如 Series , Index 等)放在一个类似列表的容器中,然后传递给 cat

对于没有索引的对象,其长度必须与调用 cat 的对象相同。但是 Series 和 Index 可以是任意的,除非设置了 json=None 。

如果在 others 参数上包含不同索引的对象,且设置了 join='right' ,则最后的结果将会是这些索引的并集