python基础复习【总】

一. python中一切皆对象

参考
Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)
Python中的所有对象都有三个特点
身份:每个对象都有一个唯一的身份标识自己,任何对象的身份都可以使用内建函数id()来得到,可以简单的理解为这个值式对象的内存地址
类型:对象的类型决定了对象可以保存什么类型的值,有哪些属性和方法,可以进行哪些操作,遵循怎样的规则。可以使用内建函数 type() 来查看对象的类型
:对象所表示的数据
Python 中的一切都可以赋值给变量或者作为参数传递给函数。

二. python中的可变对象和不可变对象

参考
python中对象可分为:可变对象和不可变对象

  1. 什么是可变对象/不可变对象:
  • 不可变对象:对象所指向的内存中的不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量不再指向原来的值,而是开辟一块新的内存,变量指向新的内存。
    不可变:int、字符串(str)、float、(数值型number)、元组(tuple)、None(空)

  • 可变对象:对象存放在地址中的值会原地改变
    可变:字典型(dictionary)、列表型(list), set(集合)

# 不可变对象
>>> a=5
>>> print id(a)
140433054259208
>>> a= 4
>>> print id(a)
140433054259232
>>> print id(a),id(4)
140433054259232 140433054259232
>>> print id(a),id(5)
140433054259232 140433054259208

打印的结果表明:不可变对象int的变量a改变后,未改变之前指向内存中5,改变后开辟一块新内存指向4
由于是不可变对象,变量对应内存的值不允许被改变。当变量要改变时,实际上是把原来的值复制一份后再改变,开辟一个新的地址,astr再指向这个新的地址(所以前后astr的id不一样),原来astr对应的值因为不再有对象指向它,就会被垃圾回收。
画一个例子表示不可变对象,在内存中的变化:

>>> list=[1,2,3,4]
>>> print id(list)
4384947808
>>> list[2]=5
>>> print list
[1, 2, 5, 4]
>>> print id(list)
4384947808

结果表明: 列表list在改变前后id并未发生改变,可变对象由于所指对象可以被修改,所以无需复制一份之后再改变,直接原地改变,所以不会开辟新的内存,改变前后id不变。

画一个例子表示可变对象,在内存中的变化:
在这里插入图片描述
执行append之后的样子:
在这里插入图片描述

三. is和==比较

参考
is 用于判断两个变量引用对象是否为同一个,即id是否相同, == 用于判断引用变量的值是否相等。
搜了好多,感觉自己测试的结果和别人的博客中结果总是不一样,不知道怎么回事,反正很少比较地址,一般都是比较值,所以一般都是用==

python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;

可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

四. python基本数据类型

详细介绍参考
参考文档
参考博客
常用方法参考
Python 3中有六个标准的数据类型:
Numbers(数字):int、float、bool、complex(复数)
String(字符串)
Tuple(元组)
List(列表)
Sets(集合)
Dictionaries(字典)
前三个不可变,后三个可变对象。
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
内置的 type() 函数可以用来查询变量所指的对象类型。

五. 三种基本结构:顺序、选择和循环

参考博客

1. if

if 条件表达式:    # 注意冒号
   语句1          # 注意缩进
else:
   语句1

多分支

if 条件表达式:
   语句1 
elif 条件表达式:
   语句1
else:
   语句1              

2. 循环语句for和while

for 变量 in 序列:
    语句1
for name in ['zhangsan','lisi','wangwu']:
    print(name)
# 从1打印到10
for i in range(1,11):
    print(i)
while 条件表达式:
      语句1

3. break ,contineu ,pass

  • break :无条件结束整个循环,简称循环猝死
  • continei: 无条件结束本次循环,重新进入下一轮循环
  • pass:表示略过,通常用于占位

六. 函数定义语法

参考博客

  1. 函数的定义与调用
  2. 参数传递
    可变类型和不可变类型
    函数中的参数可以是:必须参数;关键字参数;默认参数;不定长参数。
  3. 匿名函数

七. 类,面向对象编程

参考博客


  1. 定义;实例化;类的方法;初始化方法;私有属性和方法
  2. 继承
    (1):直接调用父类属性方法
    (2):强制调用父类私有属性方法
    (3):重写父类属性方法
    (4):调用父类的__init__方法
    (5):继承父类初始化过程中的参数
  3. 多态

八. 变量的作用域

变量作用域各种案例参考
通常而言,在编程语言java和C中,变量的作用域从代码结构形式来看,有块级、函数、类、模块、包等由小到大的级别。但是在Python中,没有块级作用域,也就是类似if语句块、for语句块、with上下文管理器等等是不存在作用域概念的,他们等同于普通的语句。if语句中的变量可以在if外使用。

Python的作用域一共有4层,分别是:
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域

global_var = 0  # 全局作用域
def outer():
    out_var = 1  # 闭包函数外的函数中
    def inner():
        inner_var = 2  # 局部作用域

Python以L –> E –> G –>B的规则查找变量,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,最后去内建中找。
如果这样还找不到,那就提示变量不存在的错误。

  1. L(local)局部作用域
    局部变量:包含在def关键字定义的语句块中,即在函数中定义的变量。每当函数被调用时都会创建一个新的局部作用域。在函数内部的变量声明,除非特别的声明为全局变量,否则均默认为局部变量。有些情况需要在函数内部定义全局变量,这时可以使用global关键字来声明变量的作用域为全局。局部变量域就像一个 栈,仅仅是暂时的存在,依赖创建该局部作用域的函数是否处于活动的状态。所以,一般建议尽量少定义全局变量,因为全局变量在模块文件运行的过程中会一直存在,占用内存空间。
    注意:如果需要在函数内部对全局变量赋值,需要在函数内部通过global语句声明该变量为全局变量。
  2. E(enclosing)嵌套作用域
    E也包含在def关键字中,E和L是相对的,E相对于更上层的函数而言也是L。与L的区别在于,对一个函数而言,L是定义在此函数内部的局部作用域,而E是定义在此函数的上一层父级函数的局部作用域。主要是为了实现Python的闭包,而增加的实现。
  3. G(global)全局作用域
    即在模块层次中定义的变量,每一个模块都是一个全局作用域。也就是说,在模块文件顶层声明的变量具有全局作用域,从外部开来,模块的全局变量就是一个模块对象的属性。
    注意:全局作用域的作用范围仅限于单个模块文件内
  4. B(built-in)内置作用域
    系统内固定模块里定义的变量,如预定义在builtin 模块内的变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值