zoukankan      html  css  js  c++  java
  • Python Day 14 函数(内置函数,匿名函数(lambda表达式))

    Python Day 14 函数(内置函数,匿名函数(lambda表达式))

      内置函数

        截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。

         内置函数    
    abs() dict() help() min() setattr()
    all()  dir()  hex()  next()  slice() 
    any()  divmod()  id()  object()  sorted() 
    ascii() enumerate()  input()  oct()  staticmethod() 
    bin()  eval()  int()  open()  str() 
    bool()  exec()  isinstance()  ord()  sum() 
    bytearray()  filter()  issubclass()  pow()  super() 
    bytes() float()  iter()  print()  tuple() 
    callable() format()  len()  property()  type() 
    chr() frozenset()  list()  range()  vars() 
    classmethod()  getattr() locals()  repr()  zip() 
    compile()  globals() map()  reversed()  __import__() 
    complex()  hasattr()  max()  round()  
    delattr() hash()  memoryview()  set()  

      1.1 作用域相关

          ** locals():函数会以字典的类型返回当前位置的全部局部变量。

          ** globals():函数以字典的类型返回全部全局变量。

      1.2 其他相关

        1.2.1 执行相关

          *** eval() 去除字符串的引号,返回对应内部的值。

    s = '{"a":1,"b":3}'
    dic = eval(s)
    print(dic,type(dic))
    print(eval('2 + 2'))
    print(eval('print(666)'))
    
    ==============
    {'a': 1, 'b': 3} <class 'dict'>
    4
    666
    None
    

          *** exec() 执行字符串内部的代码。

    print(exec('1 + 1'))   
    ==============
    None #exec 没有返回值,主要用于直接打印结果,或交互型。
    
    ret = '''
    name = input('请输入名字:').strip()
    if name == 'alex':
        print(666)
    '''
    exec(ret)

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

    '''
    参数说明:   
    
    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 #执行前name变量不存在
    Traceback (most recent call last):
      File "<pyshell#29>", line 1, in <module>
        name
    NameError: name 'name' is not defined
    >>> exec(compile3) #执行时显示交互命令,提示输入
    please input your name:'pythoner'
    >>> name #执行后name变量有值
    "'pythoner'"
    

      

        1.2.2 输入输出相关

          input() 交互输入信息,数据类型为字符串。

          print() 打印信息。

        1.2.3 内存相关

          * hash() 将不可变的数据通过hash算法转化成hash值,数字类型hash值是数字本身,其他类型hash值不固定。

    print(hash('name'))
    print(hash('age'))
    print(hash((1, 2, 3,)))
    

          id()

        1.2.4 文件操作相关

          ***(open() 函数用于打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。

        1.2.5 模块相关

          __import__: 函数用于动态加载类和函数

        1.2.6 帮助

          * help() 函数用于查看函数或模块用途的详细说明。

        1.2.7 调用相关

          *** callable() 函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

    def func1():
        print(666)
    age = 16  
    print(callable('name')) #字符串不是可调用的对象
    print(callable(age)) #变量名不是可调用的对象
    print(callable(func1)) #True
    

        1.2.8 查看内置属性

          ** dir()  函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

    print(dir(str))
    

      1.3 迭代器生成器相关

        *** range()

    print(len(range(100)))

        *** iter()

    l = [1, 2, 3, 4, 5]
    
    l_obj = l.__iter__()   
    
    l_obj = iter(l)
    
    效果一致 iter()调用__iter__()

        *** next()

    print(l_obj.__next__())
    
    print(next(l_obj))
    

      1.4 数字相关

        1.4.1 数据类型

          bool() 用于将给定参数转换为布尔类型,如果没有参数,返回 False。

          int() 函数用于将一个字符串或数字转换为整型,不能将内部为浮点数的字符串转换为整数。

          float():函数用于将整数和字符串转换成浮点数。

          complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数,如果第一个参数为字符串,则不需要指定第二个参数。

        1.4.2 进制转换

           bin:将十进制转换成二进制并返回。

    print(bin(100))
    0b1100100

           oct:将十进制转化成八进制字符串并返回。

    print(oct(10))
    0o12

           hex:将十进制转化成十六进制字符串并返回。

    print(hex(13))
    0xd
    

        1.4.3 数学运算

           *** abs() 函数返回数字的绝对值。

    print(abs(-5))
    5
    

           *** divmod()  计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。

    print(divmod(7, 3))
    
    (2, 1)
    

           ** round()  保留浮点数的小数位数,默认保留整数。

    print(round(1.234,2))
    1.23
    

           *pow():求x**y次幂。(三个参数为x**y的结果对z取余)

    print(pow(2, 3)) # 2的三次幂     8
    print(pow(2, 3, 3))  # 2的三次幂对3取余数   2
    

           ***sum():对可迭代对象进行求和计算(可设置初始值)。

    print(sum([1, 2, 3, 4]))   #10
    
    print(sum([1, 2, 3, 4], 100)) #110
    

          *** min():返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)。

    print(min([1, 3, 5, 7, -4]))  # -4 
    print(min([1, 3, 5, 7, -4], key=abs))  # 1
    

          *** max(): 返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)。

    print(max([1, 3, 5, 7, -4]))  #7
    print(max([1, 3, 5, 7, -9], key=abs)) #-9

       1.5 数据结构相关 

        1.5.1 列表和元组

          list():将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)。

    l1 = list({'name':'alex','age':1000})    #只取键
    print(l1)
    
    ['name', 'age']

          tuple():将一个可迭代对象转化成元祖(如果是字典,默认将key作为元祖的元素)。

        1.5.2 相关内置函数

          *** reversed():将一个序列翻转,并返回此翻转序列的迭代器。

    l1 = [11, 22, 33, 44, 77, 66]
    l_obj = reversed(l1)
    for i in l_obj:
        print(i)
    
    66
    77
    44
    33
    22
    11
    

          slice():构造一个切片对象,用于列表的切片。

    l1 = [11, 22, 33, 44, 77, 66]
    l2 = [111, 222, 333, 444, 777, 666]
    print(l1[1::2])
    rule = slice(1, len(l2), 2)   #重复切片动作,使用同一规则时使用slice
    print(l2[rule])
    

        1.6 字符串相关

          str():将数据转化成字符串。

          format:与具体数据相关,用于计算各种小数,精算等。

    print(format('test', '<20'))  # 左对齐
    print(format('test', '>20'))  # 右对齐
    print(format('test', '^20'))  # 居中
    
    test                
                    test
            test    
    

          *** bytes:str---> bytes  与 str.encode 相同

    s1 = 'alex'
    b1 = s1.encode('utf-8')
    b2 = bytes(s1,encoding='utf-8')
    print(b1)
    print(b2)
    
    b'alex'
    b'alex'
    

            bytearray()

    ret = bytearray('alex', encoding='utf-8')  # 类比:[97,103,....]
    print(id(ret))
    print(ret)  # bytearray(b'alex')
    print(ret[0])
    ret[0] = 65
    print(ret)
    print(id(ret))     

            memoryview()  分字节去转换成str

    b1 = bytes('你好',encoding='utf-8')
    print(b1)   #b'xe4xbdxa0xe5xa5xbd'
    ret = memoryview(b1)
    print(len(ret)) #6
    print(ret)     # <memory at 0x000002AE9240F048>
    print(bytes(ret[:3]).decode('utf-8')) #你
    print(bytes(ret[3:]).decode('utf-8')) #好
    

            ord():输入字符找该字符编码的位置 

    print(ord('a'))  #97 
    print(ord('中'))  # unicode 20013
    

            chr():输入位置数字找出期对应的字符  常用范围(大写字母:65-90  A-Z)  (小写字母:96-122) (数字:48-57)

    33 !
    34 "
    35 #
    36 $
    37 %
    38 &
    39 '
    40 (
    41 )
    42 *
    43 +
    44 ,
    45 -
    46 .
    47 /
    48 0
    49 1
    50 2
    51 3
    52 4
    53 5
    54 6
    55 7
    56 8
    57 9
    58 :
    59 ;
    60 <
    61 =
    62 >
    63 ?
    64 @
    65 A
    66 B
    67 C
    68 D
    69 E
    70 F
    71 G
    72 H
    73 I
    74 J
    75 K
    76 L
    77 M
    78 N
    79 O
    80 P
    81 Q
    82 R
    83 S
    84 T
    85 U
    86 V
    87 W
    88 X
    89 Y
    90 Z
    91 [
    92 
    93 ]
    94 ^
    95 _
    96 `
    97 a
    98 b
    99 c
    100 d
    101 e
    102 f
    103 g
    104 h
    105 i
    106 j
    107 k
    108 l
    109 m
    110 n
    111 o
    112 p
    113 q
    114 r
    115 s
    116 t
    117 u
    118 v
    119 w
    120 x
    121 y
    122 z
    123 {
    124 |
    125 }
    126 ~
    View Code
    print(chr(65))  #A
    print(chr(20013)) # unicode 中
    

            ascii:是ascii码中的返回该值,不是就返回/u...+16进制

    print(ascii('a')) #'a'
    print(ascii(1))   # 1 
    print(ascii('中')) # 'u4e2d'
    

            *** repr:返回一个对象的string形式(原形毕露)。

    msg = '小数%f' %(1.234)
    print(msg)
    msg = '姓名:%r' % ( 'alex')
    print(msg)
    print(repr('{"name":"alex"}'))
    print('{"name":"alex"}')
    
    
    小数1.234000
    姓名:'alex'
    '{"name":"alex"}'
    {"name":"alex"}
    

        1.7  数据集合(3)

            dict() 创建一个字典

    dic = dict({'name': 'alex'})
    print(dic)
    
    {'name': 'alex'}

            set() 创建一个集合

    set1 = set(('alex','wusir'))
    print(set1)

            frozenset():返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

        1.8 相关内置函数

            *** len() 返回一个对象中元素的个数

            sorted():对所有可迭代的对象进行排序操作。

    print(sorted([1, 2, 3, 4, 5, -6]))
    print(sorted([1, 2, 3, 4, 5, -6], key=abs))
    
    [-6, 1, 2, 3, 4, 5]
    [1, 2, 3, 4, 5, -6]
    
    L = [('a', 1), ('c', 2), ('d', 4), ('b', 3), ]
    print(sorted(L))
    def func1(x):
        return x[1]
    L = [('a', 1), ('c', 2), ('d', 4),('b', 3), ]
    print(sorted(L, key=func1))

            *all:可迭代对象中,全都是True才是True

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

            *any:可迭代对象中,有一个True 就是True

    print(any([0, '', False, (1,2,3)])) # True
    
    print(any([0, '', False, ()])) #False
    

            ***zip 拉链方法 返回的是一个迭代器

    l1 = [1, 2, 3, 4]
    tu1 = ('老男孩', 'alex', 'wusir')
    l2 = ['*', '**', '***', "****"]
    obj = zip(l1,tu1,l2)
    for i in obj:
        print(i)
    
    
    (1, '老男孩', '*')
    (2, 'alex', '**')
    (3, 'wusir', '***')
    

            ***map: 循环模式

    def func2(x):
        return x**2
    obj = map(func2, [1, 2, 3, 4])
    for i in obj:
        print(i)
    print((i**2 for i in [1, 2, 3, 4]))
    
    def func2(x, y):
        return x + y
    obj1 = map(func2, [1, 2, 3, 4, 6], (2, 3, 4, 5))
    for i in obj1:
        print(i)

            ***filter 筛选模式

    def func(x):
        return x % 2 == 0
    ret = filter(func,[1, 2, 3, 4, 5, 6, 7])
    print(ret) #<filter object at 0x0000021C5FB53E80>
    for i in ret:
        print(i)
    
    
    2
    4
    6
    
    print((i for i in [1, 2, 3, 4, 5, 6, 7] if i % 2 == 0))   #<generator object <genexpr> at 0x0000021C5FA90F68>
    ***lambda 匿名函数 一句话函数
    ret = lambda x, y: x+y
    函数名 = lambda 参数 :返回值
    
    #参数可以有多个,用逗号隔开
    #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
    #返回值和正常的函数一样可以是任意数据类型
    

      

    
    
    
    


           

     

     

          

  • 相关阅读:
    ansible
    celery 计划任务使用
    11 session 使用
    10 模版继承和页面之间的调用
    9 模版语言 jinja2
    8 公共函数
    7 文件上传
    6 获取请求头和URL信息
    5 获取Form表单取值
    4 文件操作 支持图片 视频 mp3 文本等
  • 原文地址:https://www.cnblogs.com/eailoo/p/9052774.html
Copyright © 2011-2022 走看看