python15


#compile,编译的使用  流程
code1='for i in range(10):print(i)'
compile1=compile(code1,'','exec')#编译
#使用exec执行流程
exec(compile1)

'''
计算
获取简单结果
'''
code2='1+2+3+4'
compile2=compile(code2,'','eval')
print(eval(compile2))

'''
交互编译,pycharm报错,不影响执行
'''
code3='name=input("please input your name")'
compile3=compile(code3,'','single')
exec(compile3)  #执行时显示交互命令
print(name)

'''
复数complex
实数:有理数和无理数
虚数:虚无缥缈的数
12j +5  虚数加实数=复数
#浮点数包括( 无线循环小数,有限循环小数)!=小数。
小数:有限循环小数,无限循环小数,无限不循环小数
对10进制转换、
bin(10) 转二级制
oct(10)转八进制
hex(10)转十六进制
0b代表二进制
0o代表八进制
0x代表十六进制
0b1010格式后面的才是数值
abs()绝对值
divmod()接受两个参数
'''
#0.01乘10的三次方
#print(0.01*10**3)

#div除法 mod取余
#print(divmod(7,2))
#小数的四舍五入
#round(3.145,2)
#pow进行幂运算
#print(pow(2,3,3))#2的三次方取余
#求和,内部数据必须是可迭代的
ret=sum([1,2,34,5])
print(ret)
res=sum(range(10))
print(res)

ret=sum([1,2,3,4],11)
print(ret)
#取绝对值之后再取最小值
t = min(1, 2, 3, -4,key=abs)
print(t)
#取绝对值之后再取最小值
t = max(1, 2, 3, -4,key=abs)
print(t)
#3>2==2等价3>2  and 2==2
print(3>2==2)
print(3>2 and 2==2)

t=4+5j
print(t)
print(t.real)
print(type(t.imag))#浮点数

#可迭代的才能切片
#方法一,把所有的数放到内存里再取,占用内容较大
# t=range(100)
# t=list(t)
# print(t[0:3])
#方法二,只在迭代器中生成三个,然后转成列表取出
t=range(100)
print(list(t[0:3]))


#把t复制给t1
t=range(100)
t1=list(t[:])
print(t1)
copy()也可以复制

 

#3,处理文件,用户指定要查找的文件和内容,将文件中包含要查找的内容的每一行都输出到屏幕
def check_file(filename,aim):
    with open(filename,encoding='utf-8') as f:
        for i in f:
            if aim in i:
                print(i.strip())

check_file('te.txt','')

 

#使用生成器实现
def check_file(filename,aim):
    with open(filename,encoding='utf-8') as f:
        for i in f:
            if aim in i:
                yield i

g=check_file('te.txt','')
for i in g:
    print(i.strip())


 

#4,写生成器,从文件中读取内容,在每一次读取到的内容之前加上'***'之后返给用户
def check_file(filename):
    with open(filename,encoding='utf-8') as f:
        for i in f:
            yield '***'+i

for i in check_file('te.txt'):
    print(i.strip())

 

#生成器每调用一次生成一条数据
def demo():
    for i in range(4):
        yield i

g=demo()
g1=(i for i in g)#i从g中取值,g从生成器中取值
g2=(i for i in g1)#g1中的值已经给了数组所以取不到
print(list(g1))#数组从g1中取值,
print(list(g2))

 

#计算执行结果
def add(n,i):
    return n+i

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

g=test()
n=1
g=(add(n,i) for i in g)
n=10
g=(add(n,i) for i in g)
n=5
g=(add(n,i) for i in g)

print(list(g))
'''
  分析思路
 从上向下执行,所以n=5
先对变量进行引入,最后引入值 由于使用了生成器,每次计算一个值 调用函数,采取回溯法,逐层引入。计算最终结果
'''

 

#判断range()是不是可迭代的,可迭代的返回true
dir查看一个对象的所有方法
callable()判断是不是函数
print('__next__' in dir(range(1,22)))
help(str)查看函数的所有用法
id()变量内存地址
print('我们的祖国是华语\n',end='1')#print每次打印自动换行,end分隔符
f=open('te.txt','w+')
print('aaa',file=f),#命令行也是一个文件,只是一个被监听的文件,默认输出到文件
f.close()


#\r #不换行,会到行首
#打印进度条,如果i=100,进行换行操作,执行前面的否则回到行初
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)#三元运算符
#flush=true不做缓存直接输出
print(per_str,end='',flush=True)   print(123,end='') #专业的参考用progress Bar
#只能用在明确知道执行的代码,
#如果有用户输入更不安全
#eval适合处理有结果的,
#exec,适合处理流程
t='print(123)'
exec(t)#能获得内容输出的值
eval(t)#能获得内容的值
print(exec(t))
print(eval(t))
print(eval('1+2+3+4'))
print(exec('1+2+3+4'))

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

 

 

posted @ 2019-04-30 20:16  jiuchen  阅读(128)  评论(0编辑  收藏  举报