Loading

day 30 内置函数,内置方法

1 内置函数

​ 接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的。那今天我们就一起来认识一下python的内置函数。这么多函数,我们该从何学起呢?

Built-in Functions
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() import()
complex() hasattr() max() round()
delattr() hash() memoryview() set()

1.1 内置函数分类

img

1.2 作用域相关

img

1.3 其他

img

1.4 和数字相关

img

1.5 和数据结构相关

img

1.6 应用

输入输出相关:

input() 输入

s = input("请输入内容 : ")  	#输入的内容赋值给s变量
print(s) 	 #输入什么打印什么。数据类型是str

print() 输出

def print(self, *args, sep=' ', end='\n', file=None): 	# known special case of print
    """
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    file:  默认是输出到屏幕,如果设置为文件句柄,输出到文件
    sep:   打印多个值之间的分隔符,默认为空格
    end:   每一次打印的结尾,默认为换行符
    flush: 立即把内容输出到流文件,不作缓存
    """
f = open('tmp_file','w')
print(123,456,sep=',',file = f,flush=True)
import time
for i in range(0,101,2):  
     time.sleep(0.1)
     char_num = i//2      #打印多少个'*'
     per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
     print(per_str,end='', flush=True)
#小越越  : \r 可以把光标移动到行首但不换行

数据类型相关:

type(o) 返回变量o的数据类型

内存相关:

id(o) o是参数,返回一个变量的内存地址

hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。

t = (1,2,3)
l = [1,2,3]
print(hash(t))  #可hash
print(hash(l))  #会报错

'''
结果:
TypeError: unhashable type: 'list'
'''

hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。

*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。

文件操作相关

open() 打开一个文件,返回一个文件操作符(文件句柄)

操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)

可以用encoding指定编码.

模块操作相关

__import__导入一个模块

import time
os = __import__('os')
print(os.path.abspath('.'))

帮助方法

在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出

或者直接执行help(o),o是参数,查看和变量o有关的操作。。。

和调用相关

callable(o),o是参数,看这个变量是不是可调用。

如果o是一个函数名,就会返回True

def func():pass
print(callable(func)) 	 #参数是函数名,可调用,返回True
print(callable(123))   	#参数是数字,不可调用,返回False

查看参数所属类型的所有内置方法

dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量

print(dir(list)) 	 #查看列表的内置方法
print(dir(int))  	#查看整数的内置方法

和数字相关

数字——数据类型相关:bool,int,float,complex

数字——进制转换相关:bin,oct,hex

数字——数学运算:abs,divmod,min,max,sum,round,pow

和数据结构相关

序列——列表和元组相关的:list和tuple

序列——字符串相关的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr

ret = bytearray('alex',encoding='utf-8')
print(id(ret))
print(ret[0])
ret[0] = 65
print(ret)
print(id(ret))
ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret))
print(bytes(ret[:3]).decode('utf-8'))
print(bytes(ret[3:]).decode('utf-8'))

序列:reversed,slice

l = (1,2,23,213,5612,342,43)
print(l)
print(list(reversed(l)))
l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,all,any,zip,filter,map

1.7 掌握

掌握

 v1='hello'

 v2=[111,222,333,444,5555,6666]

 res=zip(v1,v2)

 print(list(res))

掌握

 print(divmod(10000,33))

掌握

 class Foo:
	 pass

 obj=Foo()
 obj.xxx=1111

 print(dir(obj)) # obj.哪些属性

掌握

 for i,v in enumerate(['a','b','c']):
	 print(i,v)

掌握

 res=eval('{"a":1}') # 执行字符串中的表达式

 print(res,type(res))

掌握

 class Foo:
 	pass

 obj=Foo()

 print(isinstance(obj,Foo))

 print(isinstance([],list))  # 类型判断推荐使用 isinstance

 print(type([]) is list) # 不推荐使用

掌握

 import 'time' # 错误

 time=__import__('time')

 time.sleep(3)

2 类的内置方法

1 什么是内置方法?

定义在类内部,以 __ 开头并以__结果的方法

特点:会在某种情况下自动触发执行

2 为何要用内置方法?

为了定制化我们的类 or 对象

3 如何使用内置方法

__ str__:在打印对象时会自动触发,然后将返回值(必须是字符串类型)当做本次打印的结果输出

__ str__方法会在对象被打印时自动触发,print功能打印的就是它的返回值,我们通常基于方法来定制对象的打印信息,该方法必须返回字符串类型

 class People:
 	def __init__(self, name, age):
		 self.name = name
		 self.age = age

	 def __str__(self):
 		 print('运行了...')
		 return "<%s:%s>" %(self.name,self.age)

 obj = People('辣白菜同学', 18)

 print(obj.__str__())
 print(obj)    # <'辣白菜同学':18>

 obj1=int(10)
 print(obj1)

__ del _ :在清理对象时触发,会先执行该方法。_ del _ 会在对象被删除时自动触发。由于Python自带的垃圾回收机制会自动清理Python程序的资源,所以当一个对象只占用应用程序级资源时,完全没必要为对象定制_ del _ _方法,但在产生一个对象的同时涉及到申请系统资源(比如系统打开的文件、网络连接等)的情况下,关于系统资源的回收,Python的垃圾回收机制便派不上用场了,需要我们为对象定制该方法,用来在对象被删除时自动触发回收系统资源的操作

 class People:
 	def __init__(self, name, age):
		 self.name = name
		 self.age = age
 		 self.x = open('a.txt',mode='w')   #self.x = 占据的是操作系统资源

	 def __del__(self): 				   #发起系统调用,告诉操作系统回收相关的系统资源
	 	print('run...')
 		self.x.close()
 		
obj = People('辣白菜同学', 18)

del obj    # obj.__del__()
print('============>')
posted @ 2021-12-05 21:25  maju  阅读(33)  评论(0)    收藏  举报