zoukankan      html  css  js  c++  java
  • 2018-11-7-内置函数(1)

    主要内容

    1.range()
    2.next()
    3.iter()
    4.open()
    5.input()
    6.print()
    7.hash()&dir()
    8.eval()
    9.exec()
    10.compile
    11.help
    12.callable
    13.进度条

    1.range函数
     range(起始位置,终止位置,步长)
    一个参数#range(终止位置)
    两个参数#range(起始,终止位置)
    三个参数#range(起始,终止,步长)

    range(5)#[0,4] [0,5)
    range(1,5)#[1,4] [1,5)
    range(1,10,2)#[1,3,5,7,9]
    range(0,10,2)#[0,2,4,6,8]
    2.next函数
     next(迭代器)是内置函数
    __next__ 是迭代器的方法
    g.__next__()带双下划线的魔术方法一般情况下不直接用
    next(g) 之前所有的__next__都应该替换成next(g)
    带双下划线的所有的方法都可能和内置函数有千丝万缕的联系
    3.iter(可迭代的)
       __iter__
    迭代器=可迭代的.__iter__
    迭代器=iter(可迭代的 )
    4.open函数
      open('文件名')#跟着操作系统走的
        打开模式 默认是r
    编码 默认是操作系统的默认编码

    文件打开模式:r w a rb wb ab
    r w(文件光标&指针,是乱的)
    ((为什么不用+)以后工作没有既读又加,只是单独操作的),如果既要读又要写,那么我们需要打开两个文件
    编码:utf-8(100%)(写跨平台程序,我们用utf-8)
    别人的代码可能是 gbk,这个地方要注意
    用mac笔记本,即使我们不指定utf-8,系统已经默认使用了,而windows如果不指定可能会报错,windows默认指定的是GBK
    5.input函数  
      input('字符串数据类型的参数,提醒用户你要输入的内容')
      python2和python3的区别:
      python2
       input() 还原你输入的值的数据类型
        raw_input = py3.input
      python3
        input() 输入的所有内容都是字符串类型
        阻塞: 等待某件事情发生,如果不发生一直等着
      input的返回值就是用户输入的内容
    输入的内容 = input('提示')
    小结:input的堵塞,在这里不是一件好事,但是我们现在必须用,但是以后学到更高深的知识后,减少使用
         同样是input,我们在python3中的input()和python2的raw_input,我们自己输入的整数数字,都是字符串类型的,而python2中的input输入的整数数字,都是整型的
    6.print函数
      print(123)
      print('abc')
      print(123,'abc') #Python在这里用到的是动态传参*args
      print(123,'abc','aaa',sep='|')#sep是分隔符号
      print(123,'abc','aaa',end='@')
      print(123,'abc','aaa',end='@')
      print(123,'abc')
    总结:a.print里边的sep默认参数是空格,我们可以对其进行赋值
       b.print里边的参数end默认参数是"/n",也就是换行,我们可以进行赋值,让其打印到同一行上.
    运行结果:

            

      f=open('file','w')
      print(123,'abc',file=f)
      #print的本质 就是写文件 这个文件是pycharm的屏幕上,默认是屏幕,指定的除外
      f.close()
      sep就是seprator的简写,也就算是分离器
    7.hash函数
       # 哈希 可哈希(不可变数据类型) 不可哈希(可变数据类型)
    # 哈希是一个算法,导致了字典的快速寻址
    # 字符串'asjgkgfk'元组数字,复杂的算法 得到一个数字
    # 所有的数据要想得到不变的hash值,必须是一个不可变的数据类型
       #后期,数据库的快速查找数据类型的底层\都会用到了这个机制
    #程序 标志你的每一个数据是存储在具体的某一块内存上

    7-1.dir函数
    特殊的需求,研究或者了解一个新的数据类型,在学习到面向对象之后会介绍新的数据类型
    print(dir(int))
    print(dir(__builtins__))#查出该变量内置的名字
    dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
    8.eval函数
    可以将字符串数据类型的python代码执行,通过拼接字符串的方式来执行不同的代码--简化代码
    evalexec这个函数 不能直接操作文件当中读进来的 网络上传进来 用户输入的
    eval('print(1+2+3+4)') # 有返回值
    ret = eval('1+2/3*4')
    print(ret)
    exec('print(1+2+3+4)')  # 没有返回值
    ret = exec('1+2/3*4')
    print(ret)
    结果是:
    9.exec函数
     在同一个根目录下创建userinfo [{'id':1,'name':'alex'}]
    f = open('userinfo')
    content = f.read()
    print(content,type(content))
    ret = eval(content) #字符串=>其他数据类型的转换
    print(ret,type(ret))
    print(ret[0])
    从文件中读到的是字符串类型的,经过eval转换可以转换成list类型的

    缺陷:我们不能随随便便的读取文件,这里可能碰到黑客的陷阱,尤其是网上的文件
    例如:"删除某一个盘下的所有文件夹"
    因此eval和exec这两个函数,不能直接操作文件当中读进来的网络上传进来

    员工信息表,这个地方可以用到这个小点//思考,左右如果输入的相反怎么办?
    #后期还会有一些更好的方法!
    def get_info(f):
    if eval('33 %s 20'%f): #要判断是真是假,这里有返回值的
    print('是符合条件的行')
    if '>':
    get_info('>')
    if '<' :
    get_info('<')
    exec('for i in range(200):print(i)')#这个不需要判断真假,没有返回值
    10.compile 编译函数#锦上添花,节省时间的工具,但是平时还是很少用的//了解这些编译的过程
    # 先编译 python -编译-> 字节码(bytes) -解释-> 机器码 0101010100101
    # 先整体编译
    def func():
      yield #就是因为有预编译的过程,所以才会识别这个生成器
    compile将字符串类型的代码编译.代码对象能够通过exec语句来执行或者eval()进行求值
    (A)code1 = 'for i in range(0,10): print (i)'
    compile1 = compile(code1,'','exec')#预编译
    exec (compile1)(这行,只需要解释就行了)
    exec(code1)#这里的一步等于上边的两步,只不过,上边对了一步预编译的过程(编译加解释)
    (B)
    code2='1+2+3+4'
    compile1 = compile(code2,'','eval')#预编译
    eval(compile2)
    eval(code2)#原理同(A)
    #后期学习爬虫还会用到相关的原理
    (C)
    code3 = 'name = input("please input your name:")'
    compile3 = compile(code3,'','single')
    print(name)#这样写会报错
    (D)
    code3 = 'name = input("please input your name:")'
    compile3 = compile(code3,'','single')
    exec(compile3)
    print(name)#这样可以做到
    11.id()函数
      查看id
    12.help
    help() 帮助我们了解python的
      方式一
      输入help() 进入帮助页面,输入数据类型,帮助我们打印具体的帮助信息
      '123'.startswith()
      输入q退出帮助
      方式二
      print(help(str))
    print(help('abc'))
    help()直接进入下面命令行
    13.callable()判断某一个变量是否可调用
    def call(arg):
    if callable(arg):#如果可调用就调用
    arg()
    else: #如果不可调用就打印"参数不符合规定"
    print('参数不符合规定')
    def func():
    print('in func')
    return 1
    func2 = 1234
    call(func)
    call(func2)
    # print(callable(func))
    # print(callable(func2))
    14.打印进度条
    (1)
    per_str = ' %s%% : %s' % (10, '*' * 10)# 光标挪到最前端
      per_str = '%s%% : %s' % (10, '*' * 10)
      print(per_str,)
      小结:在这里上下两行的代码打印的结果是相同的
    (2)
    import time
    for i in range(0,101,2):  
         time.sleep(0.1)    #每一次在这个地方堵塞0.1s,0.1s结束就结束堵塞
         char_num = i//2      #打印多少个'*'
         per_str = '
    %s%% : %s
    ' % (i, '*' * char_num) if i == 100 else '
    %s%% : %s'%(i,'*'*char_num)
         print(per_str,end='', flush=True)
     可以把光标移动到行首但不换行
    (2-1)把(2)拆分
    import time
    for i in range(0,101,2):
    time.sleep(0.1) # 每一次在这个地方阻塞0.1,0.1秒结束就结束阻塞
    char_num = i//2
    if i == 100:
    per_str = ' %s%% : %s ' % (i, '*' * char_num)
    else:
    per_str = ' %s%% : %s' % (i, '*' * char_num)
    print(per_str,end = '')
    print('下载完成')
    (2-2)函数式写法
    import time   # 导入别人写好的代码
    def func():
    for i in range(0,101,2):
    time.sleep(0.1) # 每一次在这个地方阻塞0.1,0.1秒结束就结束阻塞
    char_num = i//2
    if i == 100:
    per_str = ' %s%% : %s ' % (i, '*' * char_num)
    else:
    per_str = ' %s%% : %s' % (i, '*' * char_num)
    print(per_str,end = '')
    func()
    print('下载完成')
    (2-3)简化版
    import time
    for i in range(0,101,2):
    time.sleep(0.1) # 每一次在这个地方阻塞0.1,0.1秒结束就结束阻塞
    char_num = i//2
    per_str = ' %s%% : %s' % (i, '*' * char_num)
    print(per_str,end = '')
    print('下载完成')
    总结:这种写法有个缺陷,就是打印完星号之后,直接打印"下载完成",没有换行
    上边两种写法,没有这个毛病
    (3)
    import time
    per_str = '
    %s%% : %s' % (10, '*' * 10)
    print(per_str,)
    time.sleep(1) #堵塞1s
    per_str = ' %s%% : %s' % (20, '*' * 20)
    print(per_str,end='')
    要求:
    把每一个函数是做什么的整理出来
    并且课上的小例子 再敲一遍
     
    
    
     
      
     
  • 相关阅读:
    MT4 图表上设置字符
    MC- 交易并设置止损
    MC- 挂单STOP交易
    MC-设置 止盈
    MC 跨周期 画线
    美版MC 使用
    改变和恢复view的方向
    app被Rejected 的各种原因翻译。这个绝对有用。
    更改navigationController push和pop界面切换动画
    线程访问外部数据
  • 原文地址:https://www.cnblogs.com/studybrother/p/9922373.html
Copyright © 2011-2022 走看看