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)

运行结果:

你看输出的结果为什么会换行呢,我结尾又没有设置' ' 我们来看一下:

也就是end=' '默认就是会自动换行的,可以修改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=‘ ’:输出内容末尾 有换行,可以设置为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='
%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='
 %d %%: %s
'%(i,'*'*char_num) if i==100 else '
 %d %% : %s'%(i,'*'*char_num)  #三元运算符,
是每次从开头开始
        print(content,end='',flush='True')  #flush关键字为True 是冲刷掉之前的内容,相当于覆盖??
func()
print("您的假期已经结束啦")

可以试一下,打印进度条的效果~

talk is cheap,show me the code
原文地址:https://www.cnblogs.com/xuanxuanlove/p/9594494.html