python的一些常用内置函数(内建函数)详解

文章目录

  • 1. getattr、hasattr、setattr和delattr
    • (1) getattr
    • (2) hasattr
    • (3) setattr
    • (4) delattr
  • 2. isinstance
  • 3. eval
  • 4. enumerate
  • 5. zip
  • 6. vars
  • 7. format和f
  • 8. slice

1. getattr、hasattr、setattr和delattr

(1) getattr

  • 获取对象的属性值。(属性或方法)
getattr(object, name[, default])

说明:

  • object:对象
  • name:字符串,对象的属性或方法
  • default:默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
class A:
    method = "method be get!"
    def get_method(self):
        print("get_method be get!")
        return 10

a = A()
a1 = getattr(a, "method")
print(a1)
a2 = getattr(a,"x method", "do not get method!")
print(a2)
a3 = getattr(a, "get_method")
print(a3)

输出:

method be get!
do not get method!
<bound method A.get_method of <__main__.A object at 0x7f3a458b52b0>>
  • 获取对象方法的属性值,并运行该方法
class A:
    method = "method be get!"
    def get_method(self):
        print("get_method be get!")
        return 10

a = A()
a1 = getattr(a, "get_method")()# a1 = 10
print(a1)

输出:

get_method be get!
10

(2) hasattr

判断属性是否存在。(属性或方法)

hasattr(object, attribute)
  • object:对象
  • attribute:待判断的属性
class Person:
  name = "Bill"
  age = 63
  country = "USA"

print(hasattr(Person, 'age'))
print(hasattr(Person, 'sex'))

输出:

True
False

(3) setattr

设定对象的属性值(属性或方法)。如果属性存在,则更新它的值,如果不存在,则创建它。

setattr(object, attribute, value)
  • object:对象
  • attribute:属性
  • value:属性设定的值
class Person:
  name = "John"
  age = 36
  country = "china"

setattr(Person, 'age', 40)
print(Person.age)
setattr(Person, 'sex', 'man')
print(Person.sex)

输出:

40
man

(4) delattr

从指定的对象中删除指定的属性(属性或方法)

delattr(object, attribute)
  • object:对象
  • 待要删除的属性
class Person:
  name = "Bill"
  age = 63
  country = "USA"

delattr(Person, 'age')

2. isinstance

isinstance() 函数来判断一个对象 是否是一个已知的类型 ,类似 type()。

isinstance() 与 type() 区别:如果要判断两个类型是否相同推荐使用 isinstance()。

  • type() 不会认为子类是一种父类类型,不考虑继承关系。
  • isinstance() 会认为子类是一种父类类型,考虑继承关系
a = 2
print(isinstance (a,int))
print(isinstance (a,str))
print(isinstance (a,(str,int,list)) )

输出:

True
False
True
  • type() 与 isinstance()区别:
class A:
    pass
 
class B(A):
    pass
 
isinstance(A(), A)    # returns True
type(A()) == A        # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

3. eval

eval() 函数 计算指定的表达式,如果该表达式是合法的 Python 语句,它会被执行。

str1 = '3 + 5'
print(eval(str1))

输出:

8

4. enumerate

获取集合(例如元组等)并将其作为 枚举对象 返回。

enumerate(iterable, start)
  • iterable 可迭代对象
  • start 数字。定义枚举对象的 起始编号。默认值为 0,也就是说从0开始,如果从0开始,可以省略
  • 示例1:
x = ('apple', 'banana', 'cherry')
y = enumerate(x)
for i in y:
    print(i)

输出:

(0, 'apple')
(1, 'banana')
(2, 'cherry')
  • 示例2:
x = ('apple', 'banana', 'cherry')
y = enumerate(x)

for (i,j) in y:
    print(i,' and ',j)

输出:

0  and  apple
1  and  banana
2  and  cherry
  • 示例3:
x = ('apple', 'banana', 'cherry')

for (i,j) in enumerate(x,0): #如果是0,可写可不写
    print(i,' and ',j)

输出:

0  and  apple
1  and  banana
2  and  cherry
  • 示例4:
x = ('apple', 'banana', 'cherry')

for (i,j) in enumerate(x,2): #索引i,从2开始
    print(i,' and ',j)

输出:

2  and  apple
3  and  banana
4  and  cherry

5. zip

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素 打包成一个个元组,然后返回由这些元组组成的对象,我们可以使用 list() 转换来输出列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

zip([iterable, ...])

iterabl : 一个或多个迭代器

基础代码举例1:

a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b)     # 返回一个对象

print(zipped)  # 
print(list(zipped))  # [(1, 4), (2, 5), (3, 6)]
print(list(zip(a,c))) # [(1, 4), (2, 5), (3, 6)]个数为最短列表

a1, a2 = zip(*zip(a,b))          # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
print(a1) # (1, 2, 3)
print(a2) # (4, 5, 6)

基础代码举例2:(排序的用法)

names = ['John', 'Amy', 'Jack']
scores = [98, 100, 85]  # 分数和名字是一一对应的

#按照names排序
data = list(zip(names, scores))
data.sort()
print(data) # [('Amy', 100), ('Jack', 85), ('John', 98)],names和scores列表不会发生改变

#按照分数进行排序
data = list(zip(scores, names))
data.sort()
print(data) # [(85, 'Jack'), (98, 'John'), (100, 'Amy')],names和scores列表不会发生改变

6. vars

vars([object])

vars() 函数返回对象object的属性和属性值字典对象

class A:
	nums = 3
	def __init__(self, name):
		self.name = name

a = A("qlee")
print(vars(A))
print(vars(a))

输出:

{'__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x7fb78c6875f0>, 'nums': 3}
{'name': 'qlee'}

7. format和f

  • format

format() 函数把指定值格式化为指定格式

举例:

print("{:.2f}".format(3.1415926)) #保留小数点后两位
print("{:+.2f}".format(-3.1415926)) #带符号保留小数点后两位
print("{:,}".format(123456789)) #以逗号分隔的数字格式
print("{:.2%}".format(0.25)) #百分比格式
print("{:.2e}".format(0.25)) #指数记法
print("{:>10d}".format(25)) #右对齐 (默认, 宽度为10)
print("{:<10d}".format(25)) #左对齐 (宽度为10)
print("{:^10d}".format(25)) #居中对齐 (宽度为10)

'''
进制表示:
'{:b}'.format(11) #二进制
'{:d}'.format(11) #十进制
'{:o}'.format(11) # 八进制
'{:x}'.format(11) # 十六进制,b
'{:#x}'.format(11) #十六进制,0xb
'{:#X}'.format(11) #十六进制,0XB
'''

输出:

3.14
-3.14
123,456,789
25.00%
2.50e-01
        25
25        
    25    
  • f或者F

f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法。

f-string在形式上是以 f 或 F 修饰符引领的字符串(f’xxx’ 或 F’xxx’),以大括号 {} 标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式

具体格式请参考:f-string概览

print(f'{3.1415926 : 0.3f}') #小数点留3位 ==》 3.142
print(f'123.456 is {123.456:08.2f}') #整体8位,小数保留2位,不够则补0==》123.456 is 00123.46
print(f'123.456 is {123.456:08.2e}') #指数保留法==》123.456 is 1.23e+02

 #小数点留3位,并用百分比表示 ==》  31.416%
print(f'{0.31415926 : 0.3%}')

print(f'{1234: < 10}5678') #左对齐==》输出1234     5678。右对齐和居中对齐:>/^

print(f'123456 is {123456:,}') #逗号隔开千分位=》123456 is 123,456
print(f'123456 is {123456:_}') #下划线做千分位=》123456 is 123_456


print(f'''He\'ll say {"I'm Eric"}''') #大括号外可以用\转移,而大括号内不可以。

print(f'{35:+}') #保留正负号==》+35
print(f'{35:-}') #负数前加负号(-),正数前不加任何符号(默认)

8. slice

slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。用法如下:

class slice(stop)
class slice(start, stop[, step])

举例如下:

a = ("a", "b", "c", "d", "e", "f", "g", "h")

x = slice(2) #截取前2个元素
print(a[x])

x = slice(1,3) #截取第1和2个元素
print(a[x])

x = slice(0, 5, 2) #间隔一个元素取值
print(a[x])

输出:

('a', 'b')
('b', 'c')
('a', 'c', 'e')

你可能感兴趣的:(Python,getattr,isinstance,enumerate,zip,format)