python学习笔记 day15 内置函数
内置函数
locals() ---查看本地作用域中的变量;
globals()----查看全局作用域中的变量;
def func(): a,b=1,2 print(locals()) #查看本地(在函数内部,本地自然就是局部命名空间)作用域中的变量 return "哈哈哈" ret=func() print(locals()) #查看本地(在全局作用域中本地自然就是全局命名空间)作用域中的变量,此位置的locals()和globals()效果是一样的 print(globals()) #查看全局作用域中的变量
运行结果:
iter() 方法 和 next()方法
__iter__()-----具有该方法的都是可迭代对象,都可以被for循环,iterable.__iter__()就会变成迭代器(iterator):iterable.__iter__() 等价于iter(iterable)
__next__()----同时具有__next__()方法和__iter__()方法的都是迭代器 :iterator.__next__() 等价于 next(iterator)
range()函数:
range(10)是一个可迭代的对象,但是不是迭代器:
print('__iter__' in dir(range(10))) #使用__iter__()方法来判断一个数据类型是否为可迭代对象 print('__next__'in dir(range(1)) and '__iter__' in dir(range(1))) # 使用__iter__()方法和__next__()方法判断一个数据类型是否为迭代器
运行结果:
callable():判断一个变量是否可以被调用(因为函数名也是一个变量)
def func(): pass a=1 print(callable(func)) print(callable(a))
运行结果:
help() :可以查看相关的帮助信息
help(str)
运行结果:
import:导入模块和包用的
例如之前的导入可以计算时间的模块:
import time print(time.time())
运行结果:
open():打开一个文件
with open('info',mode='r',encoding='utf-8') as file: content=file.readlines() print(content)
运行结果:
dir():可以查看某一个数据类型的方法---结果返回一个list
print(dir([])) #查看list列表数据类型的方法,返回一个list print(dir(str))
运行结果:
id():查看一个变量的内存地址
a=123 b='hello,python' print(id(a)) print(id(b))
运行结果:
hash(): 返回一个可哈希数据的哈希值
不可变数据类型(比如字符串,元组,int类型,字典的key)等都是可哈希的,而可变数据类型比如list,dict就是不可哈希的:
print(hash(int)) #int不可变数据类型是可哈希的 print(hash(set)) #set不可变数据类型是可哈希的 print(hash((1,2,3))) #tuple不可变数据类型是可哈希的 print(hash('hello,python')) #str不可变数据类型是可哈希的
可哈希的数据类型使用hash()函数会返回一个哈希值,这个哈希值是与地址相关的,比如字典的key必须要求是可哈希的,就是字典根据key查找value的时候,其实是把这个key对应的value存到key的哈希值对应的内存地址上,下一次根据key查找这个value时就会直接查找hash(key)这个哈希值对应的内存地址,一下就找到啦
再来看可变数据类型不可哈希的情况:
print(hash({'a':1})) print(hash([1,2,3]))
运行结果:
imput() :可供用户输入,返回的是str数据类型
a=input(">>>") print(a)
运行结果:
print():用户输出内容到屏幕
print('123') print(89045)
运行结果:
你看输出的结果为什么会换行呢,我结尾又没有设置'\n' 我们来看一下:
也就是end='\n'默认就是会自动换行的,可以修改end默认参数的值,来控制末尾是否换行,还是紧挨着同一行输出
我们可以修改end关键字参数的值就好了:
print('123',end='') print(8349,end='') print("哈哈哈哈")
运行结果:
再来看一个有趣的现象:
print(1,2,3,4)
当我们输出结果的时候是这样的:
再看上面print()方法那里 sep是设置输出结果之间的分隔符的,默认是空格,我们也可以修改sep的值作相应的变化:
print(1,2,3,4,sep='*')
运行结果:
print()函数中的file参数
print的内容会输出到屏幕上,其实也是一个文件,只不过这个文件在写入或者输出内容时可以被我们看到,其实我们也可以修改file默认参数的值,来完成一些别的功能:
f=open('info',mode='w',encdoing='utf-8') print("hello,xuanxuan",file=f) f.close()
运行结果:
屏幕上什么也没有,就是print函数通过file关键字参数,把内容‘aaa’写道文件f(info)中去啦:我们来看一下info文件中的内容:
print()函数的参数说明:
end=‘\n’:输出内容末尾 有换行,可以设置为end=‘’ 不换行,接着打印;
sep=' ':默认打印多个值时的分隔符,默认是空格,当然可以设置为sep='*'或者其他分隔符;
file=None:默认输出内容到屏幕,如果参数值设置为文件句柄,则打印内容到文件,屏幕不再显示;
flush='True' :就是打印内容立即输出到流文件,不做缓存;
最后来看一个关于print()函数的例子(Eva-J):
import time def func(): for i in range(0,101,2): time.sleep(0.1) num=i//2 #有多个※显示 content='\r%d%%: %s'%(i,'*'*num) print(content,end='',flush='True') func()
版本二(Eva-J)
import time def func(): for i in range(0,101,2): time.sleep(0.1) char_num=i//2 content='\r %d %%: %s\n'%(i,'*'*char_num) if i==100 else '\r %d %% : %s'%(i,'*'*char_num) #三元运算符,\r是每次从开头开始 print(content,end='',flush='True') #flush关键字为True 是冲刷掉之前的内容,相当于覆盖?? func() print("您的假期已经结束啦")
可以试一下,打印进度条的效果~