一 实例变量与类变量

  1. class Pepple:
  2. __age=18
  3. __name="zhangfff"
  4.  
  5. @classmethod
  6. def GetInfo(cls):
  7. print(cls.__name)
  8.  
  9. AAA=Pepple
  10. AAA.GetInfo()

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

  1. print(AAA.__name)

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

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

  1. class Pepple:
  2. __age=18
  3. __name="zhangfff"
  4.  
  5. @classmethod
  6. def GetInfo(cls):
  7. print(cls.__name)
  8.  
  9. AAA=Pepple
  10. print(AAA._Pepple__name)

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

  1. __name 改成了 _Pepple__name __age ---> _Pepple__age

  1. class Pepple:
  2. __age=18
  3. __name="zhangfff"
  4.  
  5. @classmethod
  6. def GetInfo(cls):
  7. print(cls.__name)
  8.  
  9. AAA=Pepple
  10. AAA.__age=20
  11. print(AAA.__age)
    print(AAA._Pepple__age)

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

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

二  _ 下划线使用

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

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

四 python3的魔法方法

  1. class Foo:
  2. """
  3. this is the dockmet
  4. """
  5. def func(self):
  6. pass
  7.  
  8. print(Foo.__doc__)

五  python 推导式

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

六 简单的装饰器

  1. def outer(func):
  2. def inner():
  3. print("认证成功")
  4. result = func()
  5. print("日志添加成功")
  6. return result
  7. return inner
  8.  
  9. @outer
  10. def f1():
  11. print("业务部门1")
  12. pass
  13.  
  14. f1()

执行过程

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

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

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

七 函数作用域

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

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

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

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

python3学习特性的更多相关文章

  1. Python3学习之路~0 目录

    目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...

  2. Python3学习(3)-高级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 文件读写 源文件test.txt line1 line2 line3 读取文件内容 f = ope ...

  3. Python3学习(2)-中级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 切片:取数组.元组中的部分元素 L=['Jack','Mick','Leon','Jane','A ...

  4. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  5. Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

    Python3学习笔记(urllib模块的使用)   1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,  ...

  6. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...

  7. Python3新特性 类型注解 以及 点点点

    Python3新特性 类型注解 以及 点点点 ... Python3 的新特性 Python 是一种动态语言,变量以及函数的参数是 不区分类型 的 在 函数中使用类型注解 相当于 给 形参的 类型 设 ...

  8. python3学习笔记(7)_listComprehensions-列表生成式

    #python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...

  9. python3学习笔记(6)_iteration

    #python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...

随机推荐

  1. tmpfs使用完毕导致数据库无法正常工作

    df -h 查看 重新启动服务器就可以了

  2. Jenkins+gitlab+maven持续集成

    https://blog.csdn.net/tq08g2z/article/details/79718425 https://www.jianshu.com/p/3507d8b2ac87 报错用下面解 ...

  3. java处理jqueryGantt甘特图数据的task.depends依赖规则方法

    前端采用jqueryGantt,github地址为:https://github.com/robicch/jQueryGantt 原以为后端只需要简单地保存甘特图任务列表和返回任务列表就行了. 但功能 ...

  4. Jmeter 逻辑控制器 之 Switch Controller

    一.认识 Switch Controller Switch Controller:开关控制器,通过其下样例顺序数值或名称 控制执行某一个样例  二.通过样例顺序数值控制执行样例  三.通过样例名称控制 ...

  5. 初学django框架 (urls,include子路由,render模板渲染)(一)

    一.urls url的使用为了告诉django哪个url调用那一段代码 如上左图所示,后面的test,test1如下图所示,为视图函数,通过前面的路径,调用后面函数的代码: 只有输入正确的url才会在 ...

  6. 最新 58集团java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.58集团等10家互联网公司的校招Offer,因为某些自身原因最终选择了58集团.6.7月主要是做系统复习.项目复盘.Leet ...

  7. [Agc029B]Powers of two_贪心_树形dp

    Powers of two 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_b 数据范围:略. 题解: 可能一点思路都没有. 但是我们发现:如 ...

  8. [转帖]Windows安全认证是如何进行的?[Kerberos篇]

    Windows安全认证是如何进行的?[Kerberos篇] NTLM 的简单看了一下 基本上了解了.. 这个KERBEROS 的看不太懂 感觉说的我也有点迷糊.. 虽然是对称加密的 但是不清不楚的.. ...

  9. No package 'eventlog' found

    syslog-ng のインスト�ル手� ●ダウンロ�ドサイト http://www.balabit.com/downloads/files/syslog-ng/sources/stable/src/ ...

  10. SQLSever语句(增、删、改、查)一、增:有4种方法1.使用insert插入单行数据

    SQL语句(增.删.改.查) 一.增:有4种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> 例:inse ...