zoukankan      html  css  js  c++  java
  • 内置函数

    内置函数

    内置:python自带


    作用域相关

    locals    获取执行本方法所在命名空间内的局部变量的字典
    globals  获取全局变量的字典

    迭代器,生成器相关

    复制代码
    range(100)  # [0,100)
    range(5,100)  # [5,100)
    range(1,100,2)
    # 可迭代对象,可以for循环,惰性计算
    iter
    iterator = iter(range(100))  # 拿到一个迭代器
    next
    next(iterator)
    复制代码

    其它

    复制代码
    # dir 查看内置属性
    print(dir([]))
    print(dir(5))
    
    # callable 调用相关
    callable()  # 可以调用
    a = 1
    print(callable(a))  # False
    print(callable(print))  # True
    
    # help 帮助
    help()  # 进去python的帮助页面
    help(list)  # 查看list的帮助信息
    # ctrl + 左键单击:pycharm的方法
    # dir:只包含方法名 —— 想查看某方法是否在这个数据类型中
    # help:包含所有方法名以及他的使用方法 —— 不知道用法
    
    # __import__ 模块相关
    import time  # 时间
    import os  # 操作系统
    
    # open 文件操作相关
    open('文件名','w',encoding='utf-8')
    # 打开模式:
    # r、w、a、ab、rb、wb
    # 编码 utf-8/gbk
    
    # 内存相关
    # hash 算法,结果为一串数字
    # hash 判断一个数据类型是否可以hash
    # 在一个程序执行的过程中,对同一个值hash的结果总是不变
    # 多次执行,对同一个值的hash结果可能改变
    # 数据的存储和查找
    # 字典查找数据快,有了key是一次寻址就查到的,将key通过算法转换为数字,代表一个内存地址,然后将值存在这个内存地址内,这种
    # 方法叫索引的寻址
    # 模块:hashlib
    print(hash(123))
    print(hash('abs'))
    
    # id 指向的内存地址
    print(id(1))  # 1对应的内存地址
    print(id(2))  # 2对应的内存地址
    
    # 输入输出
    # input,print
    s = input('提示:')  # 接收到的都是字符串
    print(s)
    
    print(1,2,3,4,5,sep='*')  # 1*2*3*4*5 sep是指定多个要打印的内容之间的分隔符
    print(1,end=',')  # end指定结尾的符号
    print(2)  # 1,2
    
    f = open('a','w')
    print('abc',file=f)  # file将内容打印到指定的文件中
    
    # 打印进度条
    import time
    for i in range(0,101,2):
         time.sleep(0.2)
         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)  # flush=True 不要缓存,直接打印
    复制代码

    字符串类型代码的执行

    复制代码
    exec("print('12345')")
    eval("print('12345')")
    print(exec('1+2+3-4'))  # None
    print(eval('1+2+3-4'))  # 2
    # exec和eval可以以python代码的形式执行一个字符串,但是exec没有返回值,eval有返回值
    # eval用于值计算的时候
    # exec用于流程性代码的执行
    
    # compile 编译
    # 1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。  
    # 2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,
    # filename参数传入空字符即可。  
    # 3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,
    # model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,
    # model应指定为'single'
    #流程语句使用exec
    code1 = 'for i in range(0,10): print (i)'
    compile1 = compile(code1,'','exec')
    exec (compile1)
    #简单求值表达式用eval
    code2 = '1 + 2 + 3 + 4'
    compile2 = compile(code2,'','eval')
    eval(compile2)
    #交互语句用single
    code3 = 'name = input("please input your name:")'
    compile3 = compile(code3,'','single')
    #执行前name变量不存在
    exec(compile3) #执行时显示交互命令,提示输入
    # please input your name:'pythoner'
    # "'pythoner'"
    复制代码

    和数字相关

    复制代码
    # 数据类型相关
    # bool int float complex
    # 进制转换
    # bin二进制
    # oct八进制
    # hex十六进制
    # 数学运算
    # abs 绝对值
    print(abs(-5))  # 5
    # divmod 取商和余数,商余函数,分页的时候用到
    ret = divmod(10,2)
    print(ret)  # (5,0)
    # round 保留几位小数
    print(round(3.1415926,2))  # 3.14
    # pow 幂运算
    print(pow(2,3))  # 8
    print(pow(3,2))  # 9
    print(pow(2,3,2))  # 2的3次方取余2  x**y%z
    # sum 接收可迭代对象
    print(sum([1,2,3,4,5,6]))
    print(sum(range(100)))
    print(sum([1,2,3,4,5,6],5))  # 26  5为起始值
    # min 取最小值
    print(min([1,3,0,9,7]))  # 0
    print(min([],default=0))  # 没有值会报错,但是default可以设置一个默认值
    print(min([-9,1,23,5],key=abs))  # 迭代可迭代对象里的每一个值,传给key后面的函数,并接收返回值
    # max 去最大值
    print(max((-25,1,3,6,8)))  # 8
    print(max((-25,1,3,6,8),key=abs))  # -25 取绝对值最大的
    print(max((),default=100))  # 内容为空的不报错,返回默认值100
    复制代码

     和数据结构相关

    列表和元组
    list,tuple数据类型强制转换

    reversed 参数:序列 返回值:反序的迭代器

    复制代码
    l = [3,4,2,6,7,1,5]
    ret = reversed(l)
    print(ret)  # <list_reverseiterator object at 0x000000000112AB70>
    print(list(ret))  # [5, 1, 7, 6, 2, 4, 3]
    l.reverse()
    print(l)  # [5, 1, 7, 6, 2, 4, 3]
    # reversed:返回迭代器,不改变原来的列表,生成一个新的序列迭代器
    # reverse:返回None,是在原本的列表的基础上修改的
    复制代码

    slice 实现了切片的函数

    l = (1,2,23,213,5612,342,43)
    sli = slice(1,5,2)
    print(l[sli])  # (2, 213)

    str 数据类型抢转为字符串

    format 字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐

    print(format('test', '<20'))  # test
    print(format('test', '>20'))  #                 test
    print(format('test', '^20'))  #         test

    bytes 网络变成的时候:能在网络上传输的只能是字节

    ret = bytes('你好,哈哈哈,再见',encoding='utf-8')
    print(ret)
    # 中间是网络传输的过程
    print(ret.decode(encoding='utf-8'))

    bytearray 对比较长的字符串做修改的时候,指定某一处进行修改,不会改变这个bytearray的内存地址

    ret = bytearray('alex',encoding='utf-8')
    print(id(ret))
    print(ret[0])
    ret[0] = 65
    print(ret)
    print(id(ret))

    memoryview

    ret = memoryview(bytes('你好',encoding='utf-8'))
    print(len(ret))
    print(bytes(ret[:3]).decode('utf-8'))
    print(bytes(ret[3:]).decode('utf-8'))

    ord chr

    print(ord('a'))  # 97 字符按照unicode转数字
    print(chr(97))  # a 数字按照unicode转换字符

    ascii 只要是ascii码中的内容,就打印出来,不是就转换成u

    print(ascii('a'))  # 'a'
    print(ascii('你好'))  # 'u4f60u597d'
    print(ascii('a你好'))  # 'au4f60u597d'

    repr 打印出内容并且能看出数据类型

    print(repr(1))  # 1
    print(repr('1'))  # '1'
    print('name:%r'%('金老板'))  # name:'金老板' %r格式化输出

    dict 字典
    set 集合
    frozenset 不可变集合

    len 计算长度

    enumerate 枚举

    l = ['笔记本','phone','apple','banana']
    for i in enumerate(l,1):
        print(i)

    all 接收一个可迭代对象,里面的元素只要有一个是False,整体就是False

    print(all([1,2,3,4,0]))  # False
    print(all([1,2,3,4]))  # True

    any 接收一个可迭代对象,里面的元素只要有一个是True,整体就是True

    print(any([True,None,False]))  # True
    print(any([False,None,False]))  # False

    zip 拉链函数

    print(zip([1,2,3,4],[5,6,7,8]))  # <zip object at 0x00000000006F5C08>
    print(list(zip([1,2,3,4],[5,6,7,8])))  # [(1, 5), (2, 6), (3, 7), (4, 8)]
    print(list(zip([0,1,2,3,4],[5,6,7,8],['a','b'])))  # [(0, 5, 'a'), (1, 6, 'b')]

     

    filter 过滤函数,有一个可迭代对象,想要一个新的内容集,是从原可迭代对象中筛选出来的新内容少于等于原内容的时候,才能用到filter

    复制代码
    def is_odd(x):
        if x > 10:
            return True
    ret = filter(is_odd,[1,4,6,7,9,12,17])  # 过滤列表中所有大于10的数
    print(list(ret))  # [12, 17]
    
    ret = filter(lambda x:x%2==0,[1,4,6,7,9,12,17])  # 过滤所有能被2整除的数
    print(list(ret))
    
    def func(x):
        return x and x.strip()
    l = ['test', None, '', 'str', '  ', 'END']
    ret = filter(func,l)  # 过滤None和空内容
    print(list(ret))  # ['test', 'str', 'END']
    
    # 请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
    # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    import math
    def is_sqr(x):
        return math.sqrt(x) % 1 == 0
    print(filter(is_sqr, range(1, 101)))
    复制代码

    map 新内容的个数等于原内容的个数

    复制代码
    ret = map(abs,[-1,-5,6,-7])
    print(list(ret))
    
    # 有一个list, L = [1,2,3,4,5,6,7,8],我们要将f(x)=x^2作用于这个list上,那么我们可以使用map函数处理
    L = [1,2,3,4,5,6,7,8]
    ret = map(lambda x:x**2,L)
    print(list(ret))
    复制代码

    filter和map
    参数很相近:都是一个函数名+可迭代对象
    返回值也很相近:都是返回可迭代对象
    区别
    filter是做筛选的,结果还是原来就在就在可迭代对象中的项
    map是对可迭代对象中的每一项做操作的,结果不一定是原来就在可迭代对象中的项

    sorted 是生成一个新列表,不改变原来的列表
    sort 是直接修改原列表的顺序,节省内存

    print(sorted([-5,3,-4,2,-1]))  # [-5, -4, -1, 2, 3]
    print(sorted([-5,3,-4,2,-1],reverse=True))  # [3, 2, -1, -4, -5]
    print(sorted([-5,3,-4,2,-1],key=abs))  # [-1, 2, 3, -4, -5] 按照绝对值排序,但是输出的还是原来的元素
  • 相关阅读:
    [Android编程心得]Debug的一些技巧
    理解WebKit和Chromium: Chromium for Android
    java compiler level does not match the version of the installed java project facet
    [Android编程心得]Activity的生命周期函数
    GDAL中的SURF算法
    SURF算法学习心得
    遥感图像处理流程
    软件界面建模浅析
    IsPostBack深入探讨
    自定义应用程序配置文件(app.config)
  • 原文地址:https://www.cnblogs.com/QQ279366/p/7826484.html
Copyright © 2011-2022 走看看