python一些内置函数1

查看作用域:globals()和locals()  --了解下就行

a = 10
def func():
    a = 20
    print(locals())  #  这里打印:{'a':20},因为当前作用域的内容只有a=20

func()
print(globals())  # 查看全局作用域的所有内容
print(locals())   # 查看当前作用域中的内容 ,这里当前作用域在全局里面,所以和globals()返回一致



>>>
{'a': 20}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00CABF40>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/pythonPLianxi1/python/20220221.py', '__cached__': None, 'a': 10, 'func': <function func at 0x00CB7778>}

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00CABF40>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/pythonPLianxi1/python/20220221.py', '__cached__': None, 'a': 10, 'func': <function func at 0x00CB7778>}

迭代器:   iter()        __iter__()        next()        __next__()

# 迭代器:iter
lst = [1,2,3]
# 使用迭代器有__iter__()和iter()2种
it = lst.__iter__()
it2 = iter(lst)  # 其实这个iter()调用的是__iter__()

# iter()实际上是:
def iter(obj):
    return obj.__iter__()


# next()和__next()用来取迭代器的下一个数据
print(it.__next__())  # 打印 :1
print(next(it))     # 打印:2;其中next()也是调用的__next__()

# next函数如下
def next(obj):
    return obj.__next__()

查看内置属性 dir:查看一个内置函数能使用哪些方法,干哪些事(查看内置属性)

调用相关 callable:这个很重要叫:能调用,判断***能否被调用,是否可以在后面添加括号,有括号就是可以被调用,返回布尔值:True和False

def f1():
    pass

def funce(fn):
    if callable(fn): # 判断内容是否可以被调用
        fn()
        print('可以被调用')
    else:
        print('您输入的内容不可以被直接调用')

funce(f1)  # 这个可以被调用输出:可以被调用
funce(123) # 这个不能被调用输出:您输入的内容不可以被直接调用

帮助相关 help:查看源码,用得少,用命令行写代码用的比较多 

文件相关 open

f = open('xxx',mode='',encoding='utf-8')
f.read()
for line in f:
    pass

f.write()

with open() as f:  # 好处是不用关闭文件
    pass

查看文件再内存的地址   id:

a=1
b=2
print(id(a))  # 输出:1673967536
print(id(b))  # 输出:1673967552

哈希 hash,其中2个一样的值哈希后的值也是一样的,注意可以哈希的数据要是不可变的

print(hash('123'),hash('sdf'),hash('sdf'))
>>>1856534906 125080430 125080430

eval:这个挺重要,可以吧字符串当代码来执行,特点是:有返回值

s= '1+1'
r = eval(s)  # 把字符串当代码去执行,有返回值
print(r)  #  输出:2



ss = 'a=[1,2,3]'
exec(ss)  # 和eval一样,但是没有返回值,eval有返回值
print(a)  # 输出:[1, 2, 3]

compile():把一段的字符串代码加载,后面可以用exec和eval执行

compile('模块1','模块2','eval/exec/single')

        其中模块1和模块2是互斥的,模块1是字符串,模块2是文件地址

        eval参数:模块x有返回值,用这个

        exec参数:模块x没有返回值,只是执行一段代码,用这个

        singl参数:有数据交互的时候使用

c1 = compile('for i in range(10):print(i)',"",'exec') # 直接拿过来用的用exec
exec (c1) #  输出:0 1 2 3 4 5 6 7 8 9


c2 = compile('1+2+3',"",'eval') # 这个计算结果的用eval
r= eval(c2)  # eval有返回值,可以进行赋值
print(r)  # 输出:6


c3 = compile('n = int(input("请输入数字:"))',"",'single')  # 有数据交互用single
exec (c3)
print(n)  # 输入什么,打印什么

重要程度:eval  >  exec  > single

eval:把字符串当代码执行,有返回值(执行后可以赋值给变量)

exec有个安全性问题

s = input("输入代码:")

exec(s)

运行的时候输入:exit(),程序会直接退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值