day6(内置函数)

1.复习

迭代器和生成器
迭代器
    可迭代协议 —— 含有iter方法的都是可迭代的
    迭代器协议 —— 含有next和iter的都是迭代器
    特点
        节省内存空间
        方便逐个取值,一个迭代器只能取一次。
生成器 —— 迭代器
    生成器函数
        含有yield关键字的函数都是生成器函数
        生成器函数的特点
            调用之后函数内的代码不执行,返回生成器
            每从生成器中取一个值就会执行一段代码,遇见yield就停止。
            如何从生成器中取值:
                for :如果没有break会一直取直到取完
                next :每次只取一个
                send :不能用在第一个,取下一个值的时候给上个位置传一个新的值
                数据类型强制转换 :会一次性把所有数据都读到内存里
    生成器表达式
        (条件成立想放在生成器中的值 for i in 可迭代的 if 条件)

2.作业

3.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕
def check_file(filename,aim):
    with open(filename,encoding='utf-8') as f:   #句柄 : handler,文件操作符,文件句柄
        for i in f:
            if aim in i:
                yield i
g = check_file('1.复习.py','生成器')
for i in g:
    print(i.strip())

4.写生成器,从文件中读取内容,在每一次读取到的内容之前加上‘***’之后再返回给用户。
def check_file(filename):
    with open(filename,encoding='utf-8') as f:   #句柄 : handler,文件操作符,文件句柄
        for i in f:
            yield '***'+i
for i in check_file('1.复习.py'):
    print(i.strip())

3.面试题

def demo():
    for i in range(4):
        yield i

g=demo()

g1=(i for i in g)
g2=(i for i in g1)

print(list(g))
print(list(g1))
print(list(g2))

def add(n,i):
    return n+i

def test():
    for i in range(4):
        yield i

g=test()
for n in [1,10,5]:
    g=(add(n,i) for i in g)//for循环套生成器,要拆开看
n = 1
g=(add(n,i) for i in test())
n = 10
g=(add(n,i) for i in (add(n,i) for i in test()))
n = 5
g=(15,16,17,18)

print(list(g))

4.内置函数

print()
input()
len()
type()
open()
tuple()
list()
int()
bool()
set()
dir()
id()
str()

print(locals())  #返回本地作用域中的所有名字
print(globals()) #返回全局作用域中的所有名字
global 变量
nonlocal 变量

迭代器.__next__()
next(迭代器)
迭代器 = iter(可迭代的)
迭代器 = 可迭代的.__iter__()

range(10)
range(1,11)
print('__next__' in dir(range(1,11,2)))

dir 查看一个变量拥有的方法
print(dir([]))
print(dir(1))

help
help(str)

变量
print(callable(print))
a = 1
print(callable(a))
print(callable(globals))
def func():pass
print(callable(func))

import time
t = __import__('time')
print(t.time())

某个方法属于某个数据类型的变量,就用.调用
如果某个方法不依赖于任何数据类型,就直接调用  —— 内置函数 和 自定义函数

f = open('1.复习.py')
print(f.writable())
print(f.readable())

id
hash - 对于相同可hash数据的hash值在一次程序的执行过程中总是不变的
    - 字典的寻址方式
print(hash(12345))
print(hash('hsgda不想你走,nklgkds'))
print(hash(('1','aaa')))
print(hash([]))

ret = input('提示 : ')
print(ret)

print('我们的祖国是花园',end='')  #指定输出的结束符
print('我们的祖国是花园',end='')
print(1,2,3,4,5,sep='|') #指定输出多个值之间的分隔符
f = open('file','w')
print('aaaa',file=f)
f.close()

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)
progress Bar

exec('print(123)')
eval('print(123)')
print(eval('1+2+3+4'))   # 有返回值
print(exec('1+2+3+4'))   #没有返回值
exec和eval都可以执行 字符串类型的代码
eval有返回值  —— 有结果的简单计算
exec没有返回值   —— 简单流程控制
eval只能用在你明确知道你要执行的代码是什么

code = '''for i in range(10):
    print(i*'*')
'''
exec(code)

code1 = 'for i in range(0,10): print (i)'
compile1 = compile(code1,'','exec')
exec(compile1)

code2 = '1 + 2 + 3 + 4'
compile2 = compile(code2,'','eval')
print(eval(compile2))

code3 = 'name = input("please input your name:")'
compile3 = compile(code3,'','single')
exec(compile3) #执行时显示交互命令,提示输入
print(name)
name #执行后name变量有值
"'pythoner'"

复数 —— complex
实数 : 有理数
        无理数
虚数 :虚无缥缈的数
5 + 12j  === 复合的数 === 复数
6 + 15j

浮点数(有限循环小数,无限循环小数)  != 小数 :有限循环小数,无限循环小数,无限不循环小数
浮点数
    354.123 = 3.54123*10**2 = 35.4123 * 10
f = 1.781326913750135970
print(f)

print(bin(10))
print(oct(10))
print(hex(10))

print(abs(-5))
print(abs(5))

print(divmod(7,2))   # div出发 mod取余
print(divmod(9,5))   # 除余

print(round(3.14159,3))
print(pow(2,3))   #pow幂运算  == 2**3
print(pow(3,2))
print(pow(2,3,3)) #幂运算之后再取余
print(pow(3,2,1))

ret = sum([1,2,3,4,5,6])
print(ret)

ret = sum([1,2,3,4,5,6,10],)
print(ret)

print(min([1,2,3,4]))
print(min(1,2,3,4))
print(min(1,2,3,-4))
print(min(1,2,3,-4,key = abs))

print(max([1,2,3,4]))
print(max(1,2,3,4))
print(max(1,2,3,-4))
print(max(1,2,3,-4,key = abs))

猜你喜欢

转载自blog.csdn.net/qq_36227329/article/details/81168643
今日推荐