Python3学习之路~3.3 内置函数

Python内置函数表:

内置参数详解:https://docs.python.org/3/library/functions.html?highlight=built#ascii 

用法:

#Author:Zheng Na

# abs() 取绝对值
print(abs(-10)) #10

# all() 如果可迭代对象iterabla中的所有元素都为真(或者iterable为空),返回True
print(all([])) # True
print(all([1,-5])) # True
print(all([0])) # False

# any() 如果可迭代对象iterable中任意一个元素为真,返回真;如果iterable为空,返回False
print(any([])) # False
print(any([1])) # True
print(any([-5])) # True
print(any([0])) # False
print(any([1,-5,0])) # True

# ascii() 把一个数据对象变成一个可打印的字符串的形式,不常用
print(ascii("你好")) # 'u4f60u597d'
a=ascii([1,2,3])
print(type(a),[a]) # <class 'str'> ['[1, 2, 3]']

# bin() 把一个整数转成二进制
print(bin(1)) # 0b1
print(bin(5)) # 0b101
print(bin(255)) # 0b11111111

# bool() 返回一个布尔值
print(bool(1)) # True
print(bool(-1)) # True
print(bool(0)) # False
print(bool([])) # False
print(bool([0])) # True
print(bool([1,2])) # True

# bitearray() and bytes()
#前面讲过,字符串不可修改,字符串的二进制字节格式更不可以修改
# 要修改必须生成一个新的覆盖旧的,如果没覆盖,其实旧的a根本没改,如下
a= bytes("abcde",encoding="UTF-8")
print(a.capitalize(),a) # b'Abcde' b'abcde
# 但是,bitearray()是可修改的二进制字节格式
b=bytearray("abcde",encoding="UTF-8")
print(b[0]) # 97 打印了a的ASCII码
print(b[1]) # 98 打印了b的ASCII码
print(b[2]) # 99 打印了c的ASCII码
#b[1] = 'B' # 报错:TypeError: an integer is required
b[1] = 66
print(b) # bytearray(b'aBcde')
#如上,可以把字符串变成bytearray形式,然后就可以对字符串进行修改了

# callables() 判断是否可调用,即是否后面可加括号
print(callable([])) # False 列表不可调用
def sayhi():pass
print(callable(sayhi)) # True 函数、类可调用

# chr() 返回ASCII码的对应表,参数必须是数字,与ord()对应相反
print(chr(97)) # a
print(ord('a')) #97

# classmethod() 类方法

# compile() 用于底层的把代码进行编译的过程,我们基本用不到
code = "for i in range(10):print(i)"
c=compile(code,'','exec') # <code object <module> at 0x0000000002444A50, file "", line 1>
exec(c) #输出0到9,但其实直接exec(code)就可以执行,哈哈

code2 = "1+3/2*6"
c2=compile(code2,'','eval')
print(eval(c2) ) # 10.0

code3='''
def fib(max):
    n,a,b=0,0,1
    while n<max:
        #print(b)
        yield b
        a,b = b,a+b
        n=n+1
    return 'done'

g = fib(6)
while True:
   try:
       x = next(g)
       print('g:', x)
   except StopIteration as e:
       print('Generator return value:', e.value)
       break
'''
py_obj=compile(code3,'err.log','exec') #err.log打印错误日志实际上不好使
exec(py_obj)
# 输出:
# g: 1
# g: 1
# g: 2
# g: 3
# g: 5
# g: 8
# Generator return value: done

# complex() 复数,不常用

# delattr() 非常有用

# dict() 生成一个字典
print(dict()) # {}

# dir() 查询一个数据类型下面有什么方法可用
a={}
print(dir(a))
# 输出:
# ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

# divmod() 返回商和榆树
print(divmod(5,2)) # (2, 1)

# enumerate()
name=['Amy','Bob','Cendy']
print(list(enumerate(name))) # [(0, 'Amy'), (1, 'Bob'), (2, 'Cendy')]
print(list(enumerate(name,start=1))) # [(1, 'Amy'), (2, 'Bob'), (3, 'Cendy')]
for index,item in enumerate(name):
    print(index,item)
# 输出:
# 0 Amy
# 1 Bob
# 2 Cendy

# eval() 将字符串string对象转化为有效的表达式参与求值运算返回计算结果
x = 1
print(eval('x+1')) # 2

# exec() 执行以string类型存储的Python代码
x,y=2,3
exec("ans = x+y")
print("Answer is:",ans) # Answer is: 5

# filter() 过滤器,类似于map()
#把range(10)中符合lambda n:n>5规则的打印出来
res = filter(lambda n:n>5,range(10))
for i in res:
    print(i) #打印6 7 8 9

# map() 类似于filter()
# 把后面的集合中的每一个值传入前面的lambda n:n*n进行处理,然后覆盖原来的列表
res = map(lambda n:n*n,range(10))
for i in res:
    print(i) #打印0 1 4 9 16 25 36 49 64 81

# reduce() 在python2.7中有,在python3.0已经将其从内置函数移到标准库中了
import functools
res = functools.reduce( lambda x,y:x+y,range(10) ) #0+1+2+3+4+5+6+7+8+9=45
print(res) # 45

# float() 浮点
# format() 类似于字符串的format

# frozenset() 冻结的、不可变的集合
#集合默认是可修改的但是将集合变成frozenset之后就不可修改了,像元组一样
a = set([1,2,4,7])
print(dir(a)) #打印方法
b = frozenset([1,2,4,7])
print(dir(b))
#如上,可以看出b比a少了很多方法,比如['add', 'clear', 'pop', 'remove', 'update', 'difference_update', 'discard',  'intersection_update', 'symmetric_difference_update']

# getattr()

# globals() 返回一个字典,将当前程序的所有全局变量以key-value的形式打印出来
print(globals())

# locals() 返回一个字典,将当前程序的局部变量以key-value的形式打印出来
def test():
    local_var = 333
    print(locals()) # {'local_var': 333}
    print(globals().get('local_val')) # None
test()
print(globals().get('local_var')) # None

# hasattr()
# hash() 哈希
# help() 查看帮助

# hex() 把一个整数转成16进制
print(hex(255)) # 0xff

# id 返回内存地址

# input() 交互输入
# user= input("Username:")

# int() 取整

# isinstance(object,classinfo) 判断object是否是classinfo类型
print(isinstance([1,2,3],list)) # True

# issubclass() 判断是否是子类

# iter() 把一个可迭代对象变成一个迭代器
names=iter([1,2,3,4,5,6])
print(type(names)) # <class 'list_iterator'>

#len() 长度
print(len([1,2,3])) # 3

# max() 最大值
# min() 最小值

#memoryview()
#usage:
#>>> memoryview(b'abcd')
#<memory at 0x104069648>
#在进行切片并赋值数据时,不需要重新copy原列表数据,可以直接映射原数据内存,
import time
for n in (100000, 200000, 300000, 400000):
    data = b'x'*n
    start = time.time()
    b = data
    while b:
        b = b[1:]
    print('bytes', n, time.time()-start)

for n in (100000, 200000, 300000, 400000):
    data = b'x'*n
    start = time.time()
    b = memoryview(data)
    while b:
        b = b[1:]
    print('memoryview', n, time.time()-start)
# 输出:
# bytes 100000 0.4980285167694092
# bytes 200000 3.0671753883361816
# bytes 300000 2.7071547508239746
# bytes 400000 5.042288541793823
# memoryview 100000 0.021001338958740234
# memoryview 200000 0.04300260543823242
# memoryview 300000 0.06600356101989746
# memoryview 400000 0.09100532531738281

# next() 相当于迭代器中的_next_()

# oct() 把一个整数转成八进制
print(oct(13)) # 0o15

# open() 打开一个文件
with open('text.txt','w',encoding='UTF-8') as f:
    pass

# ord() 返回ASCII码的对应表,参数必须是字符,与chr()对应相反
print(chr(97)) # a
print(ord('a')) #97

# pow(x,y) 返回x的y次方
print(pow(2,8)) # 256

# print() 打印
msg = "又回到最初的起点"
f = open("tofile.txt","w",encoding='UTF-8')
print(msg,"记忆中你青涩的脸",sep="|",end="",file=f)

# property()

# range()
for i in range(5):
    print(i) #输出0到4
for i in range(1,6):
    print(i) #输出1到5

# repr() 把一个对象变成字符串
a=repr([1,2,3])
print(type(a),[a]) # <class 'str'> ['[1, 2, 3]']

# reversed(seq) 跟列表中的reverse一样

# round()
print(round(1.3334)) # 1
print(round(1.3334,2)) # 1.33

# slice() 切片,没什么用处
d = range(20)
print(d[slice(2,5)]) #range(2,5) 相当于d[2:5]
print(d[2:5])

# sorted() 排序
a={6:2,8:0,1:4,-5:6,99:11,4:22}
#将字典变成列表,并按照key排序
print(sorted(a.items())) # [(-5, 6), (1, 4), (4, 22), (6, 2), (8, 0), (99, 11)]
#将字典变成列表,并按照value排序
print(sorted(a.items(),key=lambda x:x[1])) # [(8, 0), (6, 2), (1, 4), (-5, 6), (99, 11), (4, 22)]

# starticmethod()
# str()
# super()

# tuple() 元组
a = tuple([1,2,3])
print(a) # (1, 2, 3)

# type() 查看对象的数据类型,并且他也是所有对象的根
print(type([])) # <class 'list'>

# vars() 返回一个对象的所有属性名,不常用

# zip()
# zip(a,b)将a和b拼在一起,一一对应,像拉链(zip)一样
a=[1,2,3,4]
b=['a','b','c','d']
for i in zip(a,b):
    print(i)
# 输出:
# (1, 'a')
# (2, 'b')
# (3, 'c')
# (4, 'd')

# 如果a多b少,按照最少的来
a=[1,2,3,4,5,6]
b=['a','b','c','d']
for i in zip(a,b):
    print(i)
# 输出:
# (1, 'a')
# (2, 'b')
# (3, 'c')
# (4, 'd')

# __import__()
# import aaa可以引入一个模块名,但是__import__()可以引入一个字符串格式的
# __import__('aaa')
View Code
原文地址:https://www.cnblogs.com/zhengna/p/9213977.html