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

    内置函数

    一、作用域相关

    locals():返回本地作用域中的所有名字

    globals():返回全局作用域中的所有名字

    还有两个跟这个很像的词知道吗?

    global 变量:在局部声明一个全局变量

    nonlocal  变量:只能用于局部变量,找上层中离当前函数最近的一层的局部变量

    二、迭代器相关

    range():可迭代,不是迭代器,加iter变为迭代器

    print('__next__' in dir(range(1,11,2)))   #False
    print('__iter__' in dir(range(1,11,2)))   #True
    View Code

    迭代器.__next__()           next(迭代器)     基本用法一样

    迭代器=可迭代的.__iter__()

    迭代器=iter(可迭代的)

    三、其他(加粗为熟记,否则了解) 

    1、字符串类型代码的执行(3)

    1)、eval() 将字符串类型的代码执行并返回结果

    print(eval("1+2+3+4"))

     2)、exec()将字符串类型的代码执行

    print(exec("1+2+3+4"))
    exec("print("hello world")")

    注:exal()和exec()都可以执行字符串类型的代码,但eval()用于有结果的简单计算,有返回值;而exec()用于简单流程控制,没有返回值。 

     3)、compile:执行时显示交互命令,提示输入。

     注:compile  将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。

     2、输出输入相关(2):

    1)、input()输入  

    name=input("请输入姓名:")
    pwd=input("请输入密码:")
    input输入

    2)、print()输出

    import time
    for i in range(0,101,2):  
         time.sleep(0.1)
         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)
    #小越越  : 
     可以把光标移动到行首但不换行
    打印进度条

    3、数据类型相关:

    type():返回变量的数据类型

     4、内存相关(2)  

     id():返回变量的内存地址

     hash():返回一个可hash变量的哈希值,不可哈希的变量 被hash之后会报错。                                      

    t = (1,2,3)
    l = [1,2,3]
    print(hash(t))  #可hash
    print(hash(l))  #会报错
    
    '''
    结果:
    TypeError: unhashable type: 'list'
    '''
    hash举例子

    5、文件操作相关(1)

     open():打开一个文件,返回一个文件操作符(文件句柄)

    注:操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)可以用encoding指定编码

    6、模块操作相关(1)                                                                                                  

     __import__导入一个模块  

    7、帮助 (1)

    help() :在控制台输入help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出。

    或者直接执行help(o),o是参数,查看和变量o有关的操作。

    8、和调用相关(1)

     callable(o)

    o是参数,查看这个变量是不是可调用。

    如果o是函数,就会返回True. 

     9、查看内置属性(1)

    dir():默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法分变量。

    四、和数字相关

    1、数据类型相关                                                                                               

     bool:布尔值

     int:整型  

     float:浮点型

     complex:复数  

    2、进制装换相关

    bin:二进制

    oct:八进制

    hex:十六进制                                                                                                                                                

    3、数学运算相关

     abs: 绝对值

    divmod:除余

    round:小数精确位

    pow:幂运算

    sum:求和

    min:计算最小值

    max:计算最大值

    五、数据结果相关

    1、序列------列表和元组相关的:list和tuple                                    

    2、序列------字符串相关的:str, format,bytes,bytearry,memoryview,ord,chr,ascii,repr  

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

    3、序列:reversed,slice

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

    4、数据集合------字典和集合:dict,set,frozenset

    数据集合:len,sorted,enumerate,all,any,zip,filter,map

    filter

    filter()函数:循环可迭代元素调用函数,如果返回True放到filter()函数里。filter只管筛选,不会改变原来的值。

    例1:从列表中删除偶数,保留奇数。

    def is_odd(x):
        return x % 2 == 1
    filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
    #结果:[1, 7, 9, 17]
    filter删偶留奇
    def is_not_empty(s):
        return s and len(s.strip()) > 0
    filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])
    #结果:['test', 'str', 'END']
    filter

    注意:s.strip(rm)删除s字符串中开头、结尾处的rm序列的字符。当rm为空时,默认删除空字符串。

    例3、利用filte()过滤出1~100中平方公里是整数的数。

    import math
    def is_sqr(x):
        return math.sqrt(x) % 1 == 0
    print filter(is_sqr, range(1, 101))
    #结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    平方根整数

    map

    执行前后元素个数不变,值可能发生改变。

    map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

    ret = map(abs,[1,-4,6,-8])    #abs:绝对值
    print(ret)
    for i in ret:
        print(i)    #1,4,6,8
    map

    sorted

    内存空间有两个列表,生成一个新列表,一个保留原来顺序。

    优点:不改变原列表

    缺点:占内存

    例1、列表按照其中每一个值的绝对值排序

    l1 = [1,3,5,-2,-4,-6]
    l2 = sorted(l1,key=abs)
    print(l1)
    print(l2)
    绝对值排序

    例2、列表按照每一个元素的len排序

    l = [[1,2],[3,4,5,6],(7,),'123']
    print(sorted(l,key=len))
    len排序

    匿名函数

    匿名函数:为了解决那些功能很简单的需求而设计的一句话函数。

    #这段代码
    def calc(n):
        return n**n
    print(calc(10))
     
    #换成匿名函数
    calc = lambda n:n**n
    print(calc(10))
    函数对比

    注意:1)、参数可以有多个,用逗号隔开;

                2)、匿名函数不管多复杂,只能写一行,且逻辑执行结束后的内容就是返回值;

                3)、返回值可以和正常的函数一样,可以是任意数据类型

    例1、按条件输出

    res = filter(lambda x:x>10,[5,8,11,9,15])
    for i in res:
        print(i)      #结果:11    15
    按条件输出

    例2、按平方输出

    res = map(lambda x:x**2,[1,5,7,4,8])
    for i in res:
        print(i)     #结果:1  25  49  16  64
    平方输出

    例3、现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

    #方法一
    test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]
    print(test(t1,t2))
    #方法二
    print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
    #方法三
    print([{i:j} for i,j in zip(t1,t2)])
    面试题
  • 相关阅读:
    C#之正则表达式、异常处理和委托与事件
    C#之interface接口
    C#之类与对象
    C#第一次的Hello World
    第一次用博客
    用Visual Studio 2012+Xamarin搭建C#开发Andriod的环境
    cocos2dx 3.x for lua "异步加载"实现过程
    cocos2dx 3.x c++代码打包给lua调用过程(mac)
    cocos2dx 3.x lua 网络加载并且保存资源(unix、linux)
    path类和directory类对文件的路径或目录进行操作
  • 原文地址:https://www.cnblogs.com/gaoya666/p/8195760.html
Copyright © 2011-2022 走看看