• python基础知识四


    博客参考老师文章:http://www.cnblogs.com/wupeiqi/ 

    博客参考老师文章:http://www.cnblogs.com/luotianshuai/

    知识点

    def函数的坑
    
    li = [11,22,33,44]
    def f1(arg):
        arg.append(55)
    
    li = f1(li)     # 因为函数中没有return,所以默认返回None(li = None)
    print(li)       # None
    
    f1(li)
    print(li)       # [11, 22, 33, 44, 55]

    今日知识:

    一、lambda表达式

     lambda表达式,也是简单的函数:

    # ###################### 普通函数 ######################
    # 定义函数(普通方式)
    def func(arg):
        return arg + 1
      
    # 执行函数
    result = func(100)

    print (result)   # 101
    # ###################### lambda ###################### # 定义函数(lambda表达式) my_lambda = lambda arg : arg + 1 # 执行函数 result = my_lambda(100)
    print (result)         # 101 

    #自动返回return
    f1 = lambda a: a > 20

    ret = f1(30)
    print(ret)      #True

    二、内置函数

    abs()

    print(abs(-1))
    #返回绝对值 1

    all()

    li = [11,22,33]
    print(all(li))
    #所有为真时,则返回True    True
    
    l2 = [11,22,0]
    print(all(l2))
    #有一个为假时,则返回False

    any()

    l1 = [0,0,[],()]
    print(any(l1))
    #所有为假时,则返回False
    
    l2 = [1,0,[],()]
    print(any(l2))
    #有一个为真时,则返回True    True
    bin()
    print(bin(10))
    #返回一个二进制数   0b1010 

    bytes()

    s = "于晓艳"
    print(bytes(s,encoding='utf-8'))
    #以utf-8的形式返回一个值    b'xe4xbax8exe6x99x93xe8x89xb3'

    callable()

    def f1():
        print("hello world")
    
    c = callable(f1)
    print(c)        #Ture
    #查看参数是否可以被调用

    chr() & ord()

    print(chr(65))
    #接收一个数字,返回acsii表中对应的值   A

     print(ord("A"))

     #接收一个值,返回acsii表中对应的值 65

    bool()

    print(bool("a"))            #True
    print(bool([]))             #False
    #根据参数,返回False或True

     dir(),help()

    print(dir(list))
    
    """
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', 
    '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', 
    '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
    '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
    '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 
     'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
    """
    
    help(list)
    """
    Help on class list in module builtins:
    
    class list(object)
     |  list() -> new empty list
     |  list(iterable) -> new list initialized from iterable's items
     |  
     |  Methods defined here:
     |  
     |  __add__(self, value, /)
     |      Return self+value.
    ...............
    
    """
    
    # 快速查看,对象提供了那些功能

    divmod()

    r = divmod(100, 10)
    print(r)            #(10, 0)
    # 返回一个元组,第一个元素代表商,第二个元素代表余数
    a1,a2 = divmod(100,9)
    print(a1,a2)
     

    isinstance()

    s = [11,11,11]
    # 用于判断,对象是否是某个类的实例
    r = isinstance(s,list)
    print(r)            #True

    filter(函数,可迭代的对象)

    #filter,循环第二个参数,让每个循环的元素,执行参数一(函数);当执行结果返回True,则接收,返回False,中丢弃
    li = [11,22,33,44,55]
    def f1(arg):
        if arg > 22:            # 过滤,比较
            return True
    result = filter(f1,li)
    print(list(result))
    #[33, 44, 55]
    
    #filter内部,循环第二个参数
    # for item in li:
    # r = f1(item)
    # if r:
    # result(item)
    # return result

     compile()

    s = """for i in range(4):
        print(i) """
    #编译,编译模式(single(单行),eval(表达式),exec(跟python一样的))
    r = compile(s,"sting","exec")
    #执行python代码,接收:代码或都字符串
    exec(r)
    
    s ="print([11,22,33,44])"
    r = compile(s,"string",'exec')
    result = eval(r)                # [11, 22, 33, 44]
    print(result)                   # None
    
    #执行表达式,并且获取结果
    a = "8 * 8"
    res = eval(a)                    #
    print(res)                       # 64

     map()

    #map('函数',"可迭代的对象")
    #正常实现功能 li
    = [11,22,33,44,55,] def f2(arg): result = [] for i in arg: result.append(i + 100) return result s = f2(li) print(s) # [111, 122, 133, 144, 155]
    #使用map()实现功能 li = [11,22,33,44,55,] def f2(args): return args + 100 result = map(f2,li) print(list(result)) # [111, 122, 133, 144, 155]

    #使用map()加lambda,实现功能 result = map(lambda a: a+100,li) print(list(result)) # [111, 122, 133, 144, 155]

    float()

    #返回一个浮点数
    print(float(50))
    # 50.0

    globals()  & locals()

    NAME = 'RAIN'
    def show():
        s = 123
        print(locals())
        print(globals())
    show()
    
    #{'s': 123}
    
    #{'__package__': None, 'NAME': 'RAIN', '__cached__': None,
     '__name__': '__main__', '__spec__': None,
     '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000685908>,
    '__file__': 'E:/PyCharm4.5.2/PyCharm 文件/day4/内置函数.py', '__doc__': None,
    'show': <function show at 0x0000000000B3F730>, '__builtins__': <module 'builtins' (built-in)>}

    hash() 用来将对象转换成hash值,一般用来做字典的key转换

    ha = "hash hash"
    print(hash(ha))
    
    #-1596869942863300395

    hex()

    #十进制转十六进制
    print(hex(100))
    #0x64

    id()

    #查看参数的内存地址
    print(id("abc"))
    #6587872

    input()

    #默认接收一个字符串的值
    str = input("hello world:")
    print(str)
    
    # hello world:hello world
    # hello world

    int()

    #将字符串中的数字转换成int
    a = int("11")
    print(a,type(a))
    #11 <class 'int'>

    len()

    #查看该列表中总共有几个元素
    li = [11,22,33,44,]
    print(len(li))
    
    a = "于晓艳"
    print(len(a))
    #python3.x 默认返回 3
    
    a = "于晓艳"
    b = bytes(a,encoding='utf-8')
    print(len(b))
    # 返回 9
    # b'xe4xbax8exe6x99x93xe8x89xb3'

    max() & min() & sum()

    li = [11,6,99,34,100]
    print(max(li))              #最大值   100
    print(min(li))              #最小值    6
    print(sum(li))              #元素之和  250

    oct()

    #十转十六
    print(oct(100))
    #   0o144

    pow()

    #返回n的n次方
    r = pow(2,10)
    print(r)            #1024

    reversed()

    li = [11,22,33,44]
    print(list(reversed(li)))
    
    #  [44, 33, 22, 11]

    round()

    print(round(11.1))      # 11
    print(round(11.9))      # 12
    vars()   #指当前模块中有哪些变量可供使用
    zip()
    li = ["rain",11,22,33]
    l2 = ["sunny",11,22,33]
    l3 = ["ray",11,22,33]
    print(list(zip(li,l2,l3)))
    [('rain', 'sunny', 'ray'), (11, 11, 11), (22, 22, 22), (33, 33, 33)]
    
    li = ["rain",11,22,33]
    l2 = ["sunny",11,22]
    print(list(zip(li,l2)))
    #  [('rain', 'sunny'), (11, 11), (22, 22)]
    
    r = zip(li,l2,l3)
    temp = list(r)[0]
    a = " ".join(temp)
    print(a)
    # rain sunny ray

    三、 装饰器

    # 装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。
    # 简单的来说在不修改原函数的情况下,在对原函数进行包装!

    1、基础原代码
    ############### 基础平台提供的功能如下 ###############
    def f1():
        print("f1")
    
    def f2():
        print("f2")
    
    def f100():
        print("f100")
    
    ############### 业务部门A 调用基础平台提供的功能 ###############
    
    f1()
    f2()
    f3()
    f4()
    ############### 业务部门B 调用基础平台提供的功能 ############### f1() f2() f3() f4() 
    2、现需要对基础平台的所有功能进行重构,为平台提供的所有功能添加验证机制,即:执行功能前,先进行验证。
    1)只对基础平台的代码进行重构,让N业务部门无需做任何修改
    ############### 基础平台提供的功能如下 ############### 
    
    def f1():
        # 验证1
        # 验证2
        # 验证3
        print 'f1'
    
    def f2():
        # 验证1
        # 验证2
        # 验证3
        print 'f2'
    
    def f3():
        # 验证1
        # 验证2
        # 验证3
        print 'f3'
    
    def f4():
        # 验证1
        # 验证2
        # 验证3
        print 'f4'
    
    ############### 业务部门不变 ############### 
    ### 业务部门A 调用基础平台提供的功能### 
    
    f1()
    f2()
    f3()
    f4()
    
    ### 业务部门B 调用基础平台提供的功能 ### 
    
    f1()
    f2()
    f3()
    f4()
    实现方法一
    2)只对基础平台的代码进行重构,其他业务部门无需做任何修改
    ############### 基础平台提供的功能如下 ############### 
    
    dic = {"username":"rain"}
    def check(arg):
        for i in arg:
            if arg[i] == "rain":
                print("用户输入正确")
                return arg
    
    def f1():
        check(dic)
        print("log")
        print("f1")
    
    def f2():
        check(dic)
        print("log")
        print("f2")
    
    def f100():
        check(dic)
        print("log")
        print("f100")
    
    ########调用函数########
    
    f1()
    f2()
    f100()
    
    ########调用结果#########
    
    用户输入正确
    log
    f1
    定义一个函数,让每一个基层函数调用这个函数

    写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

    • 封闭:已实现的功能代码块
    • 开放:对扩展开发
    3)如果将开放封闭原则应用在上述需求中,那么就不允许在函数 f1 、f2、f3、f4的内部进行修改代码
    def outer(func):
        def check():
            print("log")
            func()
            print("end")
        return check
    
    @outer
    def f1():
        print("f1")
    
    @outer
    def f2():
        print("f2")
    
    @outer
    def f100():
        print("f100")
    #########调用函数#########
    f2()
    
    #########执行结果#########
    log
    f2
    end
    3、详细讲解装饰器
    def outer(func):
        def inner():
            print('berfore')
            func()
            print("after")
        return inner
    
    # @ + 函数名
    #功能:
    #       1、自动执行outer函数并且将其f1()的函数名 当做参数执行
    #       2、将装饰器函数的返回值,重新赋值给f1()
    
    @outer
    def f1():
        print("F1")
    
    f1()

     对比下面俩图,自己体会

    装饰器参数
    1、不带参数
    def outer(func):
        def inner():
            print('berfore')
            func()
            print("after")
        return inner
    
    @outer
    def f1():
        print("F1")
    
    
    #######执行结果#########
    
    berfore
    F1
    after
    2、带一个参数
    ####由于f1()需要一个参数,而定义装饰器时并没有给定这个参数,so:在加入装饰器时会报错
    
    def outer(func):
        def inner():
            print("before")
            func()
            print("after")
        return inner
    
    # @outer
    def f1(arg):
        print(arg)
        return "传递参数"
    
    a = f1("hello ")
    print(a)
    ##########执行结果############
    #不加装饰器之后
    """
    hello
    传递参数
    """
    
    #加装饰器之后报错
    """
    Traceback (most recent call last):
      File "E:/PyCharm4.5.2/PyCharm 文件/day4/funct.py", line 366, in <module>
        a = f1("hello ")
    TypeError: inner() takes 0 positional arguments but 1 was given
    """
    加入装饰器时会报错
    
    
    def outer(func):
        def inner(arg):
            print("before")
            r = func(arg)
            print("after")
            return r
        return inner
    
    @outer
    def f1(arg):
        print(arg)
        return "传递参数"
    
    a = f1("hello ")
    print(a)
    
    ###########执行结果############
    """
    before
    hello 
    after
    传递参数
    """
    正确的使用装饰器,传递参数
    3、带二个参数
    def outer(func):
        def inner(arg,kwarg):
            print("before")
            r = func(arg,kwarg)  
            print("after")
            return r      #返回f1()的返回值(传递参数)
        return inner
    
    @outer
    def f1(arg,kwarg):
        print(arg)
        print(kwarg)
        return "传递参数"
    
    a = f1("hello","world")
    print(a)
    
    ###########执行结果############
    """
    before
    hello
    world
    after
    传递参数
    """
    这样一个个添加实在太麻烦啦(动态参数,不要太方便哦!)
    #之前学过万能参数(动态参数),用在这里实现太方便啦
    def outer(func):
        def inner(*arg,**kwarg):
            print("before")
            r = func(*arg,**kwarg)
            print("after")
            return r
        return inner
    
    @outer
    def f1(*arg,**kwarg):
        print(arg)
        print(kwarg)
        return "传递参数"
    
    a = f1()
    print(a)
    #####执行结果######
    """
    before
    ()
    {}
    after
    传递参数
    """
    ########################################
    a = f1(["alex",11,33],**{"name":"rain"})
    print(a)
    
    """
    before
    (['alex', 11, 33],)
    {'name': 'rain'}
    after
    传递参数
    """

     未完待续!!!

  • 相关阅读:
    webpack2使用ch4-向根目录index.html文件传参并使用参数 使用线上资源 压缩html
    webpack2使用ch3-自动化生成.html和内部引入的js自动更改
    webpack2使用ch2-entry和output简要说明
    webpack2使用ch1-目录说明
    less使用ch1--简单使用
    less使用ch1--认识语法
    vue2购物车ch4-(筛选v-for 点击的那个设置样式 设为默认地址其他 联动 非循环的列表选中和非选中 删除当前选中的列表)
    gulp使用2-gulp-less及watch和错误提示
    gulp使用1-入门指南
    vue2购物车ch3-(过滤器使用 单件商品金额计算 全选全不选 总金额计算 删除商品功能)
  • 原文地址:https://www.cnblogs.com/yxy-linux/p/5543727.html
Copyright © 2020-2023  润新知