深入理解python(一)python语法总结:基础知识和对python中对象的理解

用python也用了两年了,趁这次疫情想好好整理下。

大概想法是先对python一些知识点进行总结,之后就是根据python内核源码来对python的实现方式进行学习,不会阅读整个源码,,,但是应该会把数据结构的实现、函数调用过程、以及python虚拟机的基本原理根据源码解释下。

当然限于笔者只是一个弱鸡,,,如内容有疏漏的地方或者是一些错误,希望看到的大佬不吝赐教。

第一部分 python语法总结

当然如果对python语法还是一无所知的同学请移步缪雪峰或者菜鸟教程等学习网站看一遍再过来,,,,这里只是进行一些简单的总结

当然,在这之中我会着重的标明一些python2和python3中的区别,具体的结构如下:

1.数据结构

2.选择循环

3.字符串与编码

4.函数

5.面向对象编程

6.异常处理以及python的模块

基础知识

当然,在开始之前我们还要简单的回顾一下基本知识(当然仅仅是列出一些要注意的点):

1.一切皆对象的思想

对象是python中最基本的概念,在python中处理的每个东西都可以称为对象,而同时python的变量都可以看成是内存中某个对象的引用。

关于引用的一个示例如图:

3,9即放在内存中的对象,而x则是对之的引用,当改变3的值的时候,只是将x指向的对象指向了9,而并没有改变3的值。

之后则是关于可变对象和不可变对象:

  • 可变对象和不可变对象是指内容是否可以被改变。
  • 不可变对象包括:number,string,tuple,
  • 可变对象包括:list,set,dict

下面给出几个例子来说明上面的问题:

>>> a=1
>>> id(a)
491508784
>>> b=1
>>> id(b)
491508784
>>> c=[1,2,3]
>>> id(c)
45265984
>>> d=[1,2,3]
>>> id(d)
3252992
>>> a==b
True
>>> c==d
True
>>> a is b
True
>>> c is d
False

我们可以看到,对于不可变对象,在内存中地址是唯一的,而对于可变对象,即便值相等,但是在内存中的存储却是两个不同的对象。同时python中“is”关键字是比较两个引用引用的是否为一个对象,而对于==则是比较的是对应值

再来一个例子:

>>> a=1
>>> b=a
>>> a+=1
>>> a
2
>>> b
1
>>> a=[1,2,3]
>>> b=a
>>> b
[1, 2, 3]
>>> a[0]=0
>>> a
[0, 2, 3]
>>> b
[0, 2, 3]
>>> a*=2
>>> a
[0, 2, 3, 0, 2, 3]
>>> b
[0, 2, 3, 0, 2, 3]
>>> a=a*2
>>> a
[0, 2, 3, 0, 2, 3, 0, 2, 3, 0, 2, 3]
>>> b
[0, 2, 3, 0, 2, 3]

我们可以看到,由于数字是不可变对象,所以改变a,将a指向的对象改变了,b仍然是之前所指的值。而对于可变对象,由于a,b值得是同一对象,所以通过索引改变a的时候,b也会跟着改变。

但是对于a=a*2这个操作,并没有对a进行原地(在对象上的)改变,相当于对重新创建了一个a*2的对象使a指向它,所以b并没有改变,但a*=2这个操作则是原地的,所以b也会跟着改变。

所以为了避免索引改变值,我们引用了copy操作

>>> a = [1, 2, 3]
>>> b = a[:]
>>> id(a)
140200275166560
>>> id(b)
140200275238712             # 由于 b 引用的是 a 引用对象的一个拷贝,两个变量指向的内存空间不同
>>> a[0] = 0
>>> b
[1, 2, 3]                   # 改变 a 中的元素并不会引起 b 的变化

>>> import copy
>>> b = copy.copy(a)

当然,还会有浅层copy和深层copy的区别,浅层只是对父对象进行了拷贝,而深层拷贝则是除了顶层拷贝外将所有的子对象也进行了拷贝,如下例:

>>> a=[[1,2,3],0,3]
>>> b=a.copy()
>>> a[0][0]=0
>>> b
[[0, 2, 3], 0, 3]
>>> a[1]=1
>>> a
[[0, 2, 3], 1, 3]
>>> b
[[0, 2, 3], 0, 3]
>>> import copy
>>> c=copy.deepcopy(a)
>>> a[0][0]=3
>>> a
[[3, 2, 3], 1, 3]
>>> c
[[0, 2, 3], 1, 3]

关于可迭代对象,这个就放在后面说,这里就不展开了。

之后是关于对象的回收

上每个象包含一个引用的计数器,计数器记录了当前指向该对象引用的数目,一旦对象的计数器为 0 ,即不存在对该对象的引用,则这个对象的内存空间会被回收。这就是 Python 中对象的回收机制,一个最明显的好处即在编写代码过程中不需要考虑释放内存空间。

2.几个python2和python3的差别

a.内置函数map()可以将一个单参数函数依次作用到一个序列的每个元素上,并返回:
一个列表作为结果(Python 2)
一个map对象(它是一个可迭代对象)作为结果 (Python 3)

b.python2和python3除法的区别:

Python中的除法有两种,整数除法(整除运算)和真除法
Python 2和Python 3对“/”运算符的解释有区别
Python 2将“/”解释为整数除法,而Python 3将其解释为真除法。例如,在Python 3中运算结果如下:

>>> 3/5
0.6
>>> 3//5
0
>>> 3.0/5
0.6
>>> 3.0//5
0.0
>>> 13//10
1

python2:

>>> 3/5
0
>>> 3//5
0
>>> 3.0/5
0.6
>>> 3.0//5
0.0
>>> 13//10
1

c.基本输入输出的区别

python2中input函数会根据所输入的界定符来判断对象类型,如输入1为整型,而输入‘1’为字符串型。

python2中raw_input会将所有的输入看为字符串

而python3中则没有raw_input,其input的作用就相当于python2中raw_input的作用

还有就是print函数的区别,相比大家已经很熟悉,这里不再阐述。

3.几个常用的内置函数,个人认为比较重要的几个

map函数,第一个传入一个函数,第二个参数传入一个列表,返回对列表中每个项使用第一个参数函数的结果(pyhon2和3返回的结果类型不同)

如(python3):

>>> a=[1,2,3]
>>> map(str,a)
>>> c=map(str,a)
>>> type(c)
<class ‘map‘>
>>> list(c)
[‘1‘, ‘2‘, ‘3‘]

dir()函数可以查看指定模块中包含的所有成员或者指定对象类型所支持的操作

ord()和chr()是一对功能相反的函数,ord()用来返回单个字符的序数或Unicode码,而chr()则用来返回某序数对应的字符

原文地址:https://www.cnblogs.com/halaya/p/12269490.html

时间: 2024-10-06 00:14:50

深入理解python(一)python语法总结:基础知识和对python中对象的理解的相关文章

windows上Python开发--3.Django的基础知识

最近两天下了班,没事学习了django的开发,今天做个总结.其实大家可以从百度,google搜到一些django的入门视频,初步了解一下django的框架.学习一些基础的概念和知识.本篇主要是对自己这两天做的做个总结. 1.创建第一个views.py 上一篇文章我们在windows上搭建好了django的开发环境并建立一个测试demo. 在settings.py的同级目录下新建views.py目录.并输入以下代码 from django.http import HttpResponse def

[Python学习] 专题四.文件基础知识

        前面讲述了函数.语句和字符串的基础知识,该篇文章主要讲述文件的基础知识(与其他语言非常类似). 一. 文件的基本操作         文件是指存储在外部介质(如磁盘)上数据的集合.文件的操作流程为: 打开文件(读方式\写方式)->读写文件(read\readline\readlines\write\writelines)->关闭文件 1.打开文件 调用函数open打开文件,其函数格式为: file_obj=open(filename[, mode[, buffering]])

python第四天,基础知识

本节内容: range() 函数用法 for...else... 循环语句(大多做的有限循环,) while...else...循环语句(可以无限循环) break 语句 continue 语句 range() 函数用法 python range() 函数可创建一个整数列表,一般用在 for 循环中. 函数语法 range(start, stop[, step]) 参数说明: * start: 计数从 start 开始.默认是从 0 开始.例如range(5)等价于range(0, 5); *

python之 前端HTML/CSS基础知识学习笔记

1. 文件结构: HTML文件的固定结构: <html> <head>...</head> <body>...</body> </html> html是根标签 head定义文档头部,包含: title, script, style, link, meta body是网页主要内容,包含:h1,h2-h6, p, a, img 2. 认识head标签: <head> <title>...</title>

python select和socket配合使用基础学习,是python标准库例子

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import select,socket,sys,Queue #作用:等待输入或者输出通道已经准备就绪的通知 #select模块允许访问特定平台的IO监视函数,可移植接口是POSIX函数select(),unix和windows都支持这个函数,poll()只支持unix,还有一些适用于unix特定变种选项 #select()是底层操作系统实现一个直接接口,会监视套接

python小白之路(基础知识一)

一.开篇输出:print("Hello World!") 二.中文自由行:#coding=utf-8 或 # -- coding:UTF-8 -- 三.Linux多行:#!/usr/bin/python 四.不能少的注释:1.#单行注释 2.'''多行注释''' 五.标识符由字母.下划线.数字组成,且数字不能开头 六.不能修改和使用的关键词 import keyword keyword.kwlist 七.命名规范:1.见名知意 2.驼峰命名法 八.字符串的格式化:1."我叫%

Python 装饰器学习, (基础知识)

上次妮子问我装饰器的问题,当时学的很菜,现在也很菜, 只是硬生生的把自己的记忆和例子结合取来来帮她解答. 这次又重新学习了一遍: 装饰器在函数前后执行相关的功能: 装饰器和函数都不包含参数 , 要想返回内部函数的返回至 , 需要将 内部函数的返回值保存到一个变量里面,然后返回这个值. def deco(func): print("before") ret = func() print("end") return ret def myfunc(): print(&qu

python学习9 函数的基础知识

1.函数的定义 def  func(): 2.函数的调用 func() 3.函数的返回值 #1.没有返回值 # (1)不写return # (2)只写return后面的代码不在继续执行,返回空,代表结束一个函数,跳到整个函数外面 # break 只是跳出函数内的循环内容 # (3)return None 结束 这个不常用 # 2.返回一个值 # (1) 可以返回任何数据类型 # (2)只要返回了,就可以接收了 # (3)如果一个程序有多个return 只返回一个 # 3.返回多个值 # 多个返回

#【Python】【基础知识】【内置对象常用方法】

数字的常用方法: >>> dir(int) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__get