Python标准内置函数(56-60)

1.56  函数setattr()

在Python程序中,使用函数setattr()的语法格式如下所示。

setattr(object, name, value)
  1. object:对象;
  2. name:字符串,表示对象属性。字符串可以是一个已存在属性的名字,也可以是一个新属性的名字;
  3. value:属性值。

函数setattr()对应于函数 getatt(),功能是设置属性值,该属性是必须存在。例如在下面的实例文件setattr.py中,演示了使用函数setattr()设置指定属性值的过程。

#函数有3个参数,功能是对参数object对象,设置名为name的属性的属性值为value值。

class Student:

    def __init__(self,name):

        self.name = name



a = Student('Kim')

print(a.name)

setattr(a,'name','Bob')

print(a.name)



#属性name可以是object对象的一个已经存在的属性,存在的话就会更新其属性值;如果name属性不存在,

# 则对象将创建name名称的属性值,并存储value值,等效于调用object.name = value。

#print(a.age )# 这是不存在age属性,执行后会出错

setattr(a,'age',10)# 执行后会创建 age属性

print(a.age)# 存在age属性了

a.age = 12 # 等效于调用object.name

print(a.age)

执行后会输出:

Kim

Bob

10

12

1.57  函数slice()

在Python程序中,使用函数slice()的语法格式如下所示。

class slice(stop)

class slice(start, stop[, step])
  1. start:起始位置;
  2. stop:结束位置;
  3. step:间距。

函数slice()的功能是实现切片对象,主要用在切片操作函数里的参数传递操作。函数slice()能够返回一个slice对象,表示由索引range(start, stop, step)指出的集合。参数start和参数step默认为None。切片对象具有只读属性start、stop和step,它们仅仅返回参数的值(或者它们的默认值)。他们没有其他明确的功能;但是它们被数字Python和其他第三方扩展使用。在使用扩展的索引语法时同样会生成切片对象。例如:a[start:stop:step]或者a[start:stop, i]。

例如在下面的实例文件slice.py中,演示了使用函数slice()返回一个反转的迭代器的过程。

#切片对象由3个属性start、stop、step组成,start和step默认值为None。

#切片对象主要用于对序列对象进行切片取对应元素。

a = list(range(10))

print(a)

print(a[None:5:None])# start step显式为None

print(a[:5:])# start step默认为None

print(a[2:5:None])# step显式为None

print(a[2:5:])# step默认为None

print(a[1:10:3])



#对应切片对象的3个属性start、stop、step,slice函数也有3个对应的参数start、stop、step,

#其值分别会付给切片对象的start、stop、step。

c1 = slice(5) # 定义c1

print(c1)

c2 = slice(2,5) # 定义c2

print(c2)

c3 = slice(1,10,3) # 定义c3

print(c3)

print(a[c1])# 和a[:5:]结果相同

print(a[c2])# 和a[2:5:]结果相同

print(a[c3])# 和a[1:10:3]结果相同

执行后会输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4]

[0, 1, 2, 3, 4]

[2, 3, 4]

[2, 3, 4]

[1, 4, 7]

slice(None, 5, None)

slice(2, 5, None)

slice(1, 10, 3)

[0, 1, 2, 3, 4]

[2, 3, 4]

[1, 4, 7]

1.58  函数sorted()

在Python程序中,使用函数sorted()的语法格式如下所示。

sorted(iterable, key=None, reverse=False) 
  1. iterable:可迭代对象;
  2. key:一个带有一个参数的函数,用于从列表的每个元素中提取比较的关键字:key=str.lower。默认值是None(直接比较元素)。指定可迭代对象中的一个元素来进行排序;
  3. reverse:排序规则,是一个布尔值。如果设置为True,那么列表中元素反过来比较来排序。reverse = True时表示降序,reverse = False(默认)时表示升序。

函数sorted()的功能是对所有可迭代的对象进行排序操作,与函数sort()的区别如下所示:

  1. 函数sort()是应用在 list 上的方法,函数sorted()可以对所有可迭代的对象进行排序操作;
  2. list的sort()函数返回的是对已经存在的列表进行操作,而内建函数sorted()返回的是一个新的list,而不是在原来的基础上进行的操作。

例如在下面的实例文件sorted.py中,演示了使用函数sorted()行排序操作所有可迭代对象进的过程。

#对一个可迭代对象进行排序,返回一个排序后列表。

a = sorted('dcabegf')

print(a)# 返回结果是列表



a = ['a','b','d','c','B','A']

print(a)

print(sorted(a))# 默认按字符ascii码排序

print(sorted(a,key = str.lower))# 转换成小写后再排序,'a'和'A'值一样,'b'和'B'值一样



#调用函数sorted时可以提供一个可选的命名参数reverse,它的默认值是False,用来排序结果是否倒转。

a = sorted('dcabegf')

print(a)

a = sorted('dcabegf',reverse = True) # 排序结果倒置

print(a)

执行后会输出:

['a', 'b', 'c', 'd', 'e', 'f', 'g']

['a', 'b', 'd', 'c', 'B', 'A']

['A', 'B', 'a', 'b', 'c', 'd']

['a', 'A', 'b', 'B', 'c', 'd']

['a', 'b', 'c', 'd', 'e', 'f', 'g']

['g', 'f', 'e', 'd', 'c', 'b', 'a']

1.59  函数staticmethod()

在Python程序中,使用函数staticmethod()的语法格式如下所示。

staticmethod(function)

函数staticmethod()的功能是返回function的一个静态方法,静态方法不接受隐式的第一个参数(也就是实例名称self)。要想声明静态方法,请使用下面的习惯方式:

class C:

    @staticmethod

    def f(arg1, arg2, ...): ...

@staticmethod形式是一个函数装饰器,可以在类(如C.f())或实例(如C().f())中调用。除了它的类型,实例其他的内容都被忽略。

例如在下面的实例文件staticmethod.py中,演示了使用装饰器@staticmethod的过程。

class C(object):

    @staticmethod

    def f():

        print('toppr');



C.f();  # 静态方法无需实例化

cobj = C()

cobj.f()  # 也可以实例化后调用



#类中普通的方法,实际上既可以被类直接调用也可以被类的实例对象调用,但是被实例对象调用的时候,

#要求方法至少有一个参数,而且调用时会将实例对象本身传给第一个参数。

class Student(object):

    def __init__(self, name):

        self.name = name



    def sayHello(lang):

        print(lang)

        if lang == 'en':

            print('Welcome!')

        else:

            print('你好!')



Student.sayHello

a = Student('Bob')

print(a.sayHello)

Student.sayHello

Student.sayHello('en')  # 类调用的时候,将'en'传给了lang参数

a.sayHello()  # 类实例对象调用的时候,将对象本身自动传给了lang参数,不能再接收参数

#a.sayHello('en')#运行这行代码会出错



#staticmethod函数功能就是将一个方法定义成类的静态方法,正确的方法是使用 @staticmethod装饰器,

#这样在实例对象调用的时候,不会把实例对象本身传入静态方法的第一个参数了。

# 使用装饰器定义静态方法

class Student(object):

    def __init__(self,name):

        self.name = name

    @staticmethod

    def sayHello(lang):

        print(lang)

        if lang == 'en':

            print('Welcome!')

        else:

            print('你好!')



Student.sayHello('en') #类调用,'en'传给了lang参数

b = Student('Kim') #类实例对象调用,不再将类实例对象传入静态方法

#b.sayHello()#运行这行代码会出错

b.sayHello('zh')  #类实例对象调用,'zh'传给了lang参数

执行后会输出:

toppr

toppr

<bound method Student.sayHello of <__main__.Student object at 0x0000018E0FF87710>>

en

Welcome!

<__main__.Student object at 0x0000018E0FF87710>

你好!

en

Welcome!

zh

你好!

1.60  函数str()

在Python程序中,使用函数str()的语法格式如下所示。

class str(object='')

class str(object=b'', encoding='utf-8', errors='strict')

函数str()的功能是返回object的str版本,参数str是一个内置字符串类。

例如在下面的实例文件str.py中,演示了使用函数str()将对象转换成其字符串表的过程。

#将对象转换成其字符串表现形式,如果不传入参数,将返回空字符串。

print(str())

print(str(None))

print(str('abc'))

print(str(123))

#当转换二进制流时,可以传入参数encoding,表示读取字节数组所使用的编码格式;

#参数errors,表示读取二进制的错误级别。(这两个参数和open方法中的同名参数有相同取值和类似的含义

file = open('test.txt','rb') # 打开文件

fileBytes = file.read() # 读取二进制流

print(fileBytes)

print(str(fileBytes)) # 默认将二进制流转换成字符串表现形式

print(str(fileBytes,'utf-8')) # 传入encoding参数,函数将以此编码读取二进制流的内容

print(str(fileBytes,'gbk')) # 当传入encoding不能解码时,会报错(即errors参数默认为strict)

print(str(fileBytes,'gbk','ignore')) # 'ignore' 忽略级别,字符编码有错,忽略掉

print(str(fileBytes,'gbk','replace')) # 'replace' 替换级别,字符编码有错的,替换成?.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值