zoukankan      html  css  js  c++  java
  • python3学习特性

    一 实例变量与类变量

    class Pepple:
        __age=18
        __name="zhangfff"
    
        @classmethod
        def GetInfo(cls):
            print(cls.__name)
    
    AAA=Pepple
    AAA.GetInfo()

    以上代码 利用类方法输出类变量

    print(AAA.__name)

    如果直接这样输出会报错,因为__开头的类变量收到保护

    但是如果这样输出!!!!

    class Pepple:
        __age=18
        __name="zhangfff"
    
        @classmethod
        def GetInfo(cls):
            print(cls.__name)
    
    AAA=Pepple
    print(AAA._Pepple__name)

     会得到  正确的结果, python对私有变量的保护是假的  会将其改名 为 _类名__XXXX 实例的 

    __name 改成了 _Pepple__name  __age --->  _Pepple__age

    class Pepple:
        __age=18
        __name="zhangfff"
    
        @classmethod
        def GetInfo(cls):
            print(cls.__name)
    
    AAA=Pepple
    AAA.__age=20
    print(AAA.__age)
    print(AAA._Pepple__age)

    这里需要注意  这里虽然可以赋值 但是这个变量  AAA.__age  其实是实例变量 不是类变量

    另外 以_一个下划线开头的 建议 也不要再方法外部直接访问(这种可以直接访问)

     二  _ 下划线使用

    for  _ in range(1,10):
        print(_)

    一般再不用 _的时候 也就是 可以用_ 代替一般的i

    四 python3的魔法方法

    class Foo:
        """
        this is the dockmet
        """
        def func(self):
            pass
    
    print(Foo.__doc__)

    五  python 推导式

    lis = [x*x  for x in range(10)]
    print(lis)
    lis = [x*x  for x in range(10) if x %2 ==0 ]
    print(lis)
    lis = [a+b  for a in '123' for  b in 'abc']
    print(lis)
    dic={"k1":"v1","k2":"v2"}
    a = [k+ ":" +v  for k,v in dic.items()]
    print(a)
    dic={i:i**3 for  i in range(5)}
    print(dic)
    s={i  for i in "abcdasd" if i not in "abc"}
    print(s)
    结果为集合

     六 简单的装饰器

    def outer(func):
        def inner():
            print("认证成功")
            result = func()
            print("日志添加成功")
            return result
        return  inner
    
    
    @outer
    def f1():
        print("业务部门1")
        pass
    
    f1()

      执行过程 

    一:   到 @outer 这里 知道这是一个装饰器  把f1这个函数名!!!作为参数传递给outer  也就是 outer(f1)  注意这里 不执行函数  这里的outer函数有返回值 inner  这时候 inner就是指向 f1

    二 :执行f1()  -->  这时候的f1 就是inner

    print("认证成功")  -->  这时候的func 也就是原来的f1 -->print("业务部门1") -->   print("日志添加成功")

    七 函数作用域 

    a=1
    def test(a):
            print("函数内部修改前a的地址是%s"%(id(a)))
            a=2
            print("函数内部修改后a的地址是%s"%(id(a)))
    
    print("函数外部修改前a的地址是%s"%(id(a)))
    test(3)
    print("函数外部修改后a的地址是%s"%(id(a)))

     我们发现修改前后a的地址没用变化,说明 函数内部的 a 其实是独立的一个变量,赋值运算会再函数内部开辟一个新的变量空间

    a=["1qwe"]
    def test(a):
            print("函数内部修改前a的地址是%s"%(id(a)))
            a.append("www")
            print("函数内部修改后a的地址是%s"%(id(a)))
    
    print("函数外部修改前a的地址是%s"%(id(a)))
    test(a)
    print("函数外部修改后a的地址是%s"%(id(a)))

     如果传递的是一个列表(可变的对象)  发现内部外部的对象是一样的

     

  • 相关阅读:
    20189315《网络攻防实践》第十周作业
    20189315《网络攻防实践》第九周作业
    20189315《网络攻防实践》第八周作业
    20189315《网络攻防实践》第七周作业
    20189315《网络攻防实践》第六周作业
    20189315《网络攻防实践》第五周作业
    20189315《网络攻防实践》第四周作业
    20189315《网络攻防实践》第三周作业
    20189315《网络攻防实践》第二周作业
    20189315《网络攻防实践》第一周作业
  • 原文地址:https://www.cnblogs.com/ZFBG/p/11386141.html
Copyright © 2011-2022 走看看