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)

 

posted @ 2017-09-07 16:36  mendax  阅读(66)  评论(0)    收藏  举报