day17内置函数
作用域相关:
1.局部作用域中的变量 —— locals()
2.全局作用域中的变量 —— globals()
在全局执行这两个方法,结果相同
在局部执行,locals表示的是函数内的名字,globals始终不变。
def func(): x=1 y=2 print(locals()) print(globals())
迭代器和生成器相关
__iter__和iter() 功能是一样的
__next__和next() 功能是一样的
在pythone里,为了保持“队形”,要尽量少用双下的方法。
range()
字符串类型的代码执行相关:
eval: 有返回值
exec:没有返回值
complie:当需要对某一个字符串数据类型的python代码多次执行的时候,
就用compile先编译一下
code1 = "for i in range(0,10):print(i)" complie1 = complie(code1,"","exec") exec(complie1)
code2 = "1+2+3+4" complie2 = complie2(code2,"","eval") print(eval(complie2))
name = 'egon' code3 = 'name = input("please input your name:")' compile3 = compile(code3,'','single') exec(compile3) print(name)
#直接拿来执行的方式一定不要随便用
#如果非用不可,你也要做最起码的
输入输出:
输入:input()
输出:print()
#a = input('>>>') print(self, *args, sep=' ', end='\n', file=None) # print(11232,1234,sep='***') sep是值中分割符,默认是空格。 # print(12,34,56,sep=',') # print('%d,%d,%d'%(12,34,56)) # print('ajkdshkljaf',end=' ') end是默认结尾执行一次换行操作 # f = open('print_test','a',encoding='utf-8') # print(12146798,file=f) file是python创建一个默认文件,可修改
打印进度条:
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) flush = True是实时的将数据打印出来,否则python会等待一段时间打印 \r 可以把光标移动到行首但不换行
内存相关:
hash():程序在一次执行的时候,所有的hash值是一样的,都是一个数字
必须是一个可迭代对象。
# print(hash('dsaklfksgd')) # print(hash((1,2,3,4,5,6))) # print(hash([12,3,54])) #列表 字典 集合
可以用作字典的key,方便查找内容。
url = 'http://xhpfmapi.zhongguowangshi.com/share/index.html?docid=2269496&channel=weixin' from urllib.request import urlopen content = urlopen(url).read() dic = {hash(url):content} hash(url) #数字
id():
id('assdsd') id('assdsd')
身份运算 is is not 不仅比较值的大小还比较内存地址是否一致
== 值运算 只比较值的大小
查看内置属性:
dir()
查看所有的内置函数:
print(dir(__builtins__))
filter和map:
filter() 过滤掉函数中不返回True的值:
必须是一个可迭代对象。
def func(n): if n%2 == 0: return True lst = [1,2,3,4,5,6,7] ret = filter(func,lst) #过滤 #返回一个迭代器 for i in ret: print(i)
lst2 = ['ajgd','asdjkw','12389',[],(),123,124] def func2(n): if type(n) is str:return True new_ret = filter(func2,lst2) print(list(new_ret))
lst = ['test', None, '', 'str', ' ', 'END'] def func2(m): if m and m.strip(): return True print(list(filter(func2,lst)))
map():不过滤对象,
lst = [1,2,3,4,5,6,7] def func(item): return item*item print(list(map(func,lst)))
enumerate(),添加序号
enumerate(,可以设置起始的值。)
返回的是一个元组。
se = {'computer':10000,'umbrella':200}
for k in se:
print(k,se[k])
for num,goods in enumerate(se,1):
print(num,goods,se[goods])
#面试真题
# 有⼀个数据结构如下所示,请编写⼀个函数从该结构数据中返回由指定
的字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。(10分)
data={"time":"2016-08-05T13:13:05",
"some_id":"ID1234",
"grp1":{ "fld1":1,"fld2":2},
"xxx2":{ "fld3":0,"fld5":0.4},
"fld6":11,
"fld7":7,
"fld46":8}
#fields:由"|"连接的以"fld"开头的字符串,如:fld2|fld3|fld7|fld19
data={"time":"2016-08-05T13:13:05",
"some_id":"ID1234",
"grp1":{ "fld1":1,"fld2":2},
"xxx2":{ "fld3":0,"fld5":0.4},
"fld6":11,
"fld7":7,
"fld46":8}
def select(data,fields,result = {}):
field_lst = fields.split('|')
for key in data:
if key in field_lst:
result[key] = data[key]
elif type(data[key]) == dict:
select(data[key], fields)
return result
fields = 'fld2|fld3|fld7|fld19'
ret = select(data,fields)
print(ret)

浙公网安备 33010602011771号