Python:self理解】的更多相关文章

一般情况下我这样使用property: @property def foo(self): return self._foo # 下面的两个decrator由@property创建 @foo.setter def foo(self, value): self._name = value @foo.deletter def foo(sf): del self._name 其实这是个语法糖,用了装饰器,其实内部真是的过程是这样的: def _get_name(self): return _name d…
在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域, 这点和大多数 OO 语言类似吧,比如 C++.java 等 ~ 1.先来看个问题吧: 在Python中,令values=[0,1,2];values[1]=values,为何结果是[0,[...],2]? >>> values = [0, 1, 2] >>> values[1] = values >>> values [0, [.…
通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了. 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器(Generator). 简单生成器 要创建一个generator,有很…
递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面对此方面进行更加深入的理解 递归的分类 这里根据递归调用的数量分为线性递归.二路递归与多重递归 线性递归 如果一个递归调用最多开始一个其他递归调用,我们称之为线性递归. 例如: def binary_search(data, target, low, high): """ 二分查…
此篇题目在网上已经广为流传,但好多都不做解释,所以我想着自己一道一道的做一遍,并将相关涉及的做个补充,个人知识毕竟片面,有不足的地方还请大家多多指正 一.请用一行代码实现1-100之和 >>> sum(range(0,101)) 5050 理解:range函数用来生成整数列表,传两个参数表示范围的头尾,用区间表示注意前闭后开[0,101),即不包含最后一位数 二.如何在一个函数内部修改全局变量 >>> a = 5 >>> def fun(): ...…
最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的.第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料.其中,网上有部分文章是按照如下方式描述跳跃表的: 这种描述便于理解,很容易让人理解到跳跃表是建立了类似索引的东西,从而提高效率的.但是,这样描述给人的感觉是,数据有多份存储,每份数据有两个指针,指向下层数据的指针和指向右面数据的指针.然而实际并不是这样的,实际的数据结构如下: 即:并非由多份数据,而是每份数据有多层指针. 那么,什么是跳跃表,跳跃…
译注:这是一篇在Stack overflow上 很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子 和代码片段以帮助理解,以及在什么情况下需要进行元编程.于是e-satis同学给出了神一般的回复,该回复获得了985点的赞同点数,更有人评论说这段 回复应该加入到Python的官方文档中去.而e-satis同学本人在Stack Overflow中的声望积分也…
刚开始学习Python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解: 1. 通过一个函数调用来理解’*’的作用 2. 通过一个函数的定义来理解’*args’的含义 3. 通过一个函数的调用来理解’**’的作用 4. 通过一个函数的定义来解’**kwargs’的含义 5. 通过一个应用实例来说明’args’,’kwargs’应用场景以及为何要使用它 通过一个函数调用来理解’*…
在发送网络请求的过程中,单个请求的速度总是有着很大的限制,而任务往往需要以更快的速度去执行,这时多线程就是一个很好地选择.python已经给我们封装好了多线程库thread和threading. thread:比较底层的模块 threading:Higher-level threading interface ps:建议使用threading模块 - 高级别的threading模块更为先进,对线程的支持更为完善 - 低级别的thread模块同步原语很少 - thread模块对线程什么时候结束完全…
摘要:分享学习Python数据结构的一些理解,主要包含序列(如列表和元组),映射(如字典)以及集合3中基本的数据结构,以及可变和不可变数据类型. Python 中的数据结构是根据某种方式将数据元素组合起来形成的一个数据元素集合,其中主要包含序列(如列表和元组),映射(如字典)以及集合3中基本的数据结构.几乎所有的Python数据结构都可以归结为这3种数据结构类型. 1.数据类型结构总表 Python数据结构除了分为序列(如列表和元组),映射(如字典)以及集合3中基本的数据结构外,也可区分为可变数…
变量是编程的基础概念,Python 的变量也看似很简单,但是如果理解不当,生搬硬套,可能会遇到一些麻烦. 下面用 10 个代码示例展示 Python 的 变量 本质. 以下内容有对应的 视频 手把手详细讲解,更适合零基础小白. 1. 只是个名字 当 a 出现在赋值语句的左侧时,它仅仅代表一个 名字: a = 1024 a = 'davycloud' a = ['点赞', '关注', '收藏'] 赋值完成后,这个名字和右侧的对象就 绑定 在一起了.在这个过程中, a 是否已经绑定了其它对象完全不用…
变量进阶(理解) 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的 内存地址 注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用 变量 不再 对之前的数据引用…
简介 线程理解中介绍过,再回顾一遍,一个应用程序由多个进程组成,一个进程由多个线程组成,由操作系统根据优先级.时间片来绝对线程的运行 进程 python的进程不同于线程,在主流的cpython解释器下,无论创建多少线程,都只会在一个cpu上运行,与java等语言有所区别,进程则与其他语言类似,会占用对应的cpu资源,因此进程相对于线程来说开销会大一点,进程适用于计算密集型程序 常见的进程创建方式 1.multiprocessing的Process创建进程 from multiprocessing…
简介 一个应用程序由多个进程组成,一个进程有多个线程,一个线程则是操作系统调度的最小单位,当应用程序运行时,操作系统根据优先级和时间片调度线程(决定此时此刻执行哪个线程). python的线程 python存在多个解释器,cpython.jpython等,但目前主流常用的则是cpython,其存在GIL锁,从而导致无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行,因此适用于io密集型程序,由于读写io需要时间且python线程只能在一个cpu运…
socket 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制.从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口. 创建socket方式 普通创建 socket.socket(family=-1, type=-1, proto=-1, fileno=None): family: 地址族: AF_UN…
python中有一种赋值机制即多元赋值,采用这种方式赋值时,等号两边的对象都是元组并且元组的小括号是可选的.通常形式为 x, y, z = 1, 2, 'a string' 等同于 (x, y, z) = (1, 2, 'a string') 这种赋值类型最经常用到的环境是变量交换,形如 x, y = y, x 这种交换方式无需中间变量即可交换两个变量的值.那么具体实现机制是怎样的呢? 运行时,首先构造一个元组(y, x),然后构造另一个元组(x, y),接着用元组(y, x)赋值给(x, y)…
只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: for 取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每一项: = [1, 2, 3, 4]for x in addlist(alist):    print x, 这的确是yield应用的一个例子,但是,看过limodou的文章<2.5版yield之学习心得>,并自己反复体验后,对yield有了一个全新的理解. 1. 包含yield的函数 假如你看到某个函数包含了yield,这意味着这个函数已经是一个…
在别人的代码中看到yield这个关键字,看了几篇资料,说一下个人理解. 包含yield 关键字的函数成为一个迭代器,yield跟return的位置一样,只不过每次返回结果后,并没有退出,而是等待下一次迭代,下一次迭代开始后从yield后的语句开始执行,直到再次遇到yield,返回新一次的结果. 当然,不熟悉yield的同学可能也不太理解迭代器(比如我 ^^),因而用更通俗的话来说就是,如果一个函数(脚本)需要多次重复(循环)执行,并且每次循环的结果都是需要的,那么用yield代替return就可…
进程,是一个或多个线程的集合,每个进程在内存中是相对独立的. 线程,是计算机最小的运算单元,每个进程至少要有一个线程,多个线程时,每个线程间之间共享内存. 分别举例常规运行和多线程运行: 0)常规运行: import time import datetime def run(n): print('run at : ',n) time.sleep(2) start = datetime.datetime.now() run('t1') run('t2') stop = (datetime.date…
1.一句话快速理解 yield 等于 return  这么简单理解 2.详细说明: yield和return的关系和区别了,带yield的函数是一个生成器,而不是一个函数了 这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从foo函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束. 3.从代码理解: next()函…
参考:https://foofish.net/iterators-vs-generators.html 从网上看到一个面试题,求最后的输出结果: def add(n, i): return n+idef test(): for i in range(4): yield ig = test() for n in [1, 10, 5]: g=(add(n, i) for i in g) print(list(g)) 输出结果:[1, 2, 3, 4][][] list数据类型强转也可以读取生成器的值…
yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(alist): for i in alist: yield i+1 alist=[1,2,3,4] for x in addlist(alist): print(x) #输出是: 2 3 4 5 [Finished in 0.2s] 取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每…
1,鸭子类型和多态 当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也像鸭子,那这只鸟就是鸭子 是不是比较混乱,看个例子: # -*- coding:UTF-8 -*- __autor__ = 'zhouli' __date__ = '2018/11/14 20:46' class Cat: def say(self): print('iam a cat') class Dog: def say(self): print('iam a dog') class Duck: def say(self…
先看下for结构: #!/usr/bin/python # -*- Coding:UTF-8 -*- for i in range(1): print i 输出: 0 输入和输出: #!/usr/bin/python # -*- Coding:UTF-8 -*- for i in range(1, 10): print i #输出: 1 2 3 4 5 6 7 8 9 输入和输出: #!/usr/bin/python # -*- Coding:UTF-8 -*- for i in range(1…
如何理解uiautomator里面的 child, child_by_text, sibling,我们借助android原生的uiautomatorviewer抓取的控件来进行理解 以如下图进行详细讲解(左边与右边的通过不同颜色进行圈起来,表示了这些控件的归属关系),例如红圈部分为一个父类,投影绿圈和黄圈均为它的子类(称为child),而绿圈和黄圈属于同级别关系,则可以理解为兄弟关系(称为sibling) 比如要点击“Navigation bar hide”的开关进行打开或者关闭,则代码为: d…
元类 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319106919344c4ef8b1e04c48778bb45796e0335839000 1)type() 结论:动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的.正常情况下,我们都用 class Xxx... 来定义类,但是, type() 函数也允许我们动态创…
在 Python 中,元组是不可变序列,那为什么当元组中的元素是可变序列时(如 list.dict)可进行增删的操作? 在定义一个元组时,Python内部会为元组中的每一个元素分配一个内存地址,当我们更改这个列表时, 只是更改了这个列表中的内容,但是这个元组的元素所指向的内存地址是没有被更改的,也就没有违背不可变序列的要求 所以是可以进行增删操作的.示例代码如下 In [35]: tup = ([1,2],2) In [36]: [id(i) for i in tup] Out[36]: [20…
装饰器是修改其他函数的函数.好处是可以让你的函数更简洁. 一步步理解这个概念: 一.一切皆对象. def hi(name="yasoob"): return "hi " + name print(hi()) # output: 'hi yasoob' # 我们甚至可以将一个函数赋值给一个变量,比如 greet = hi # 我们这里没有在使用小括号,因为我们并不是在调用hi函数 # 而是在将它放在greet变量里头.我们尝试运行下这个 print(greet())…
信息来自python说明文档(https://docs.python.org/3/library/json.html) 函数功能 输出一个python对象到文件 函数声明 json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False,…
简介 与java语言一样,python也属于面向对象编程,除此之外,还有面向过程编程.函数式编程. 面向过程编程:依据业务逻辑自上而下一步一步编写, 可能会存在冗余现象 函数式编程:需要编程语言可以将方法或函数作为返回值,python支持函数式编程,但java就不支持,编写函数,然后在使用时调用即可 面向对象编程:将函数进行分类.封装,由不同对象进行调用触发,使得代码便于扩展与编写,减少代码重复 什么是面向对象编程呢? 面向对象是一种编程方式,主要通过类和对象实现, 类相当于是一个模板,里面提供…