• 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)))

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

     

  • 相关阅读:
    java构造简易的FIFO缓冲淘汰方法
    Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary up
    nested exception is java.io.IOException: The temporary upload location
    springboot临时文件存储目录配置
    SpringBoot上传文件报错,临时路径不存在
    SpringBoot: 浅谈文件上传和访问的坑 (MultiPartFile)
    java并发-原子性
    用ATOMICSTAMPEDREFERENCE解决ABA问题
    【APP接口开发】chrome浏览器DHC工具安装使用(亲测有效)
    【Redis】windows环境下安装redis服务器,并配置php的redis扩展
  • 原文地址:https://www.cnblogs.com/ZFBG/p/11386141.html
Copyright © 2020-2023  润新知