python内存、基础学习、数据分析

一、内存

        在python中,一切都是对象。Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象。

        Java虽然也是面向对象编程的语言,但是血统没有Python纯正。比如Java的八种基本数据类型之一int,在持久化的时候,就需要包装成Integer类对象。但是在python中,一切皆对象。数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象,包括你的代码。

对象的概念

        不同的编程语言以不同的方式定义“对象”。某些语言中,它意味着所有对象必须有属性和方法;另一些语言中,它意味着所有的对象都可以子类化。

        在Python中,定义是松散的,某些对象既没有属性也没有方法,而且不是所有的对象都可以子类化。但是Python的万物皆对象从感性上可以解释为:Python 中的一切都可以赋值给变量或者作为参数传递给函数。

Python 的所有对象都有三个特性:(id()、type()、值)

身份:每个对象都有一个唯一的身份标识自己,任何对象的身份都可以使用内建函数 id() 来得到,可以简单的认为这个值是该对象的内存地址。

类型:对象的类型决定了对象可以保存什么类型的值,有哪些属性和方法,可以进行哪些操作,遵循怎样的规则。可以使用内建函数 type() 来查看对象的类型。

值:对象所表示的数据

“身份”、"类型"和"值"在所有对象创建时被赋值。如果对象支持更新操作,则它的值是可变的,否则为只读(数字、字符串、元组等均不可变)。只要对象还存在,这三个特性就一直存在。

        从技术上来说,每一个对象有两个标准的头部信息,一个类型标识符来标识类型,还有一个引用的计数器,用于决定是否需要对对象进行回收。

C,C ++或Java,值存储在内存中,并且变量指向该内存位置。(堆内存、栈内存

在C语言中和python中,变量的存储形式如下:

        pythpn存储数据的时候,需要耗费一定的内存去存储和数据相关的信息。而这些信息是C语言的写成的,而当我们去修改变量的值时,相当于重新创建了一个变量,会在自动跑一遍C的底层代码,将数据所有信息更新,而这些底层代码很复杂,不需要我们去写,而是在python设计之初就已经全部写好,我们只要去执行变量赋值的操作就ok。这也是python好用的点之一。

        因此,每当您创建一个变量时(比如a = 200),就会在内存中创建一个新的PyObjec它的ref count被设置为1,变量“a”指向它。

内存中的PyObject:

  • 类型:整数、字符串、浮点数等
  • 引用计数:绑定到该对象的引用的数量ref count
  • 值:值/数据/信息

但是什么是ref count呢?

让我们举个例子来理解它。我们有一个类型为integer、值为200的变量“a”。假设我需要另一个名为“b”的变量,其类型为integer,值为200。你已经创建了两个这样的变量

因此,您已经创建了两个这样的变量

a = 200 b = 200

现在,您可能在猜测,对于变量“a”和“b”,内存中必须有2个对象。但事实并非如此。“a”和“b”指向同一个对象。

将新对象分配给变量

将新对象分配给现有变量时。前一个对象的ref count减1。

>>> a=1
>>> id(a)
94147440556736
>>> a=2
>>> id(a)
94147440556768
>>>

现在,回到前面的问题,当对象的ref count为0时会发生什么。它是否保留在内存中呢?

一旦对象的ref count变为0,垃圾收集器就会将其从内存中删除。

对象相等

== 操作符用于测试两个被引用的对象的值是否相等
is 用于比较两个被引用的对象是否是同一个对象

当操作对象为一个较小的数字或较短的字符串时,又有不同:

这是由于 Python 的缓存机制造成的,小的数字和字符串被缓存并复用,所以 a 和 b 指向同一个对象

------------------------------------------------------------------------------------------------------------------------------

二、基础

应用:

python列表和Numpy数组

区别:(188条消息) python列表和Numpy数组的区别_numpy数组和列表的区别_herr_whf的博客-CSDN博客

1二者都可以用于处理多维数组。

        Numpy中的ndarray对象用于处理多维数组,它作为一个快速而灵活的大数据容器。

        Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组。

2存储效率和输入输出性能不同。

        Numpy专门针对数组的操作和运算进行了设计,存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。

3元素数据类型。

        通常,Numpy数组中的所有元素的类型都必须相同的,

        而Python列表中的元素类型是任意的,

        所以在通用性能方面Numpy数组不及Python列表,

        但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。

1.python列表

2.Numpy数组

3.对象

        class( 类 :定义了该集合中每个对象所共有的属性和方法

                    

                类变量:在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。所有类的实例化对象都同时共享类变量,也就是说,类变量在所有实例化对象中是作为公用资源存在的

                局部变量:定义在方法中的变量,只作用于当前实例的类。

                实例变量:类体中,所有函数内部:以“self.变量名”的方式定义的变量

                类方法:类中定义的函数。

                )

        类方法、类变量:的调用方式有 2 种,既可以使用类名直接调用,也可以使用类的实例化对象调用。类名不仅可以调用类变量,也可以修改它的值。因为类变量为所有实例化对象共有,通过类名修改类变量的值,会影响所有的实例化对象。通过类名修改类变量,会作用到所有的实例化对象。(等价于python的静态变量 static

        值得一提的是,除了可以通过类名访问类变量之外,还可以动态地为类和对象添加类变量。例如,在 CLanguage 类的基础上,添加以下代码:

clang = CLanguage()
CLanguage.catalog = 13
print(clang.catalog)

        实例变量:指的是在任意类方法内部,以“self.变量名”的方式定义的变量,其特点是只作用于调用方法的对象。

        通过(类)对象可以访问类变量,但无法修改类变量的值。通过类对象修改类变量的值,不是在给“类变量赋值”,而是定义新的实例变量只有通过类名 才可以修改类变量值

        局部变量:只能用于所在函数中,函数执行完成后,局部变量也会被销毁

        

        方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

        

        继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

  • 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法

  • 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self

  • self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类

          类的继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。


数据分析:

什么是数据分析:指收集大量数据使用适当的分析方法进行分析,运用高效的分析工具将他们加以分类和汇总。提取其中最有价值的信息,概括总结形成有效结论,挖掘数据最大价值的过程。

工具和技能:

excel:不算重要但是人人都会的技能。

sql:很重要

spss:专业的统计分析软件(并不是每一家都用),并不需要精通

python:面对大量复杂的数据,利用sql进行自动化操作

业务数据分析:

 

 python数据分析:

EXCEL:

1.作为办公软件的一员,现在已经被捆绑在office中一起销售

2.WPS Office和Microsoft Office是目前中国人主流的办公软件中最多的两款。Microsoft Office是Microsoft开发的一套办公套件。WPSOffice是金山软件股份有限公司开发的是一套办公套件。

3.WPS包含着非常多便民套件。都是免费使用的。包含着最常见的Word、Excel、PPT以外。还拥有PDF阅读。文档修复。词霸、笔记、邮件等套件。但是不支持Ass(数据库)。体积小。‘云办公’。打开快。安装快。兼容平台最多!支持office不支持的Linux平台。专业针对性不够强。兼容性差。因为免费所以广告多(充钱就能解决问题)打开docx、xlsx、pptx会卡顿。文件发给office打开会出现文档漂移问题。

4.Office包含着非常多及其专业的套件。需要付费使用。价格上也是极其的高昂。包含最常见的三套件(最常见的Word、Excel、PPT)以外。最新版本的Word支持打开PDF也支持编写。但是最推荐的还是Adobe Reader pro作为PDF的日常使用方式。这是题外话。下次再讲述PDF编辑为什么主推这一款。Office桌面版本还有Access(数据库)、Onenote(笔记本)、Outlook(邮箱)、Publisher(页面布局)、Skype(语音通话)、OneDrive(云储)等及其专业的配套软件。专业针对性强、兼容性好、可编辑PDF、ppt流畅不克顿。甚至可以抠图、Excel可连接服务器与数据。

5.系统兼容性:WPS支持真正的全平台,兼容伟大的Linux(开源系统)。Office只支持普通的Windows、Mac、Android、ios。不过也可以称作全平台。但是office在Mac上的功能阉割十分的多,一方面苹果不希望微软在他的房子里做的太好另一方面微软也不想在别人的房子里做的太好。导致两边都不怎么鸟用Mac使用office办公的客户。Windows平台主推Office。

猜你喜欢

转载自blog.csdn.net/zr_xs/article/details/131097729