• 技术文章 >头条

    python基础知识整理(值得收藏)

    yangyang2020-05-07 17:07:26转载8929
    近些年python语言非常流行,许多开发者都会学习一些python相关知识,本文为大家整理了python的一些基础知识,希望对大家有一定的帮助。

    注:下文Python代指Python3。

    基本信息

    基本构成

    Python中一切皆对象,数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象。

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

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

    所有对象都有三个共同特征:

    大部分 Python 对象有属性、值或方法,使用句点.标记法来访问属性。 最常见的属性是函数和方法,一些 Python 对象也有数据属性,如:类、模块、文件等。

    数据存储

    字符串、数字数据在内存中均为引用类型,即栈内存保存数据本身,堆内存维护一个变量池,如下实例:

    # 开辟内存存储数据'hello',并创建变量a,并将a的指针指向此数据
    a = 'hello'
    # 开辟内存存储数据'world',并更改变量a的指针,销毁数据'hello'
    a = 'world'
    # 开辟内存存储数据"hello world!",并同时创建三个变量,将三个变量的指针同时指向此数据
    b = c = d = "hello world!"
    # 多个变量赋值,同上,分别先后对应
    e, f, g = 1, 2, 'python'

    实际上变量a在首次声明并赋值时,栈区开辟内存存储'hello'字符串, a再次赋值时,栈区重新开辟内存存储数据'world'字符串,同时将变量a的指针指向数据'world',销毁数据'hello'

    其他数据类型,类似;如列表、字典:

    a = [1,2,3,4]
    # 变量a的指针不改变
    a[0] = 5
    # 变量a的指针改变
    a = [2,3,4,5]

    变量a更改列表子数据时,列表本身的指针和位置不会改变,但将a本身重新赋值时,则同上:原列表数据销毁、指针指向新列表数据。

    Python中支持删除变量对对象的引用,使用del语句,如下:

    a = 10
    b = 20
    c = 30
    d = [1,2,3,4]
    del a
    del b, c
    del d[0]

    对象比较

    类型比较

    缓存和内存回收机制

    缓存机制

    Python 缓存了某些不变的对象对其进行复用,而不是每次创建新的对象。 在 Python 中变量都是指向某一对象的引用,当多个变量都引用了相同的对象,称为共享引用。

    如下代码:

    # 由于变量仅是对对象数据的一个引用,因此改变 a 并不会导致 b 的变化
    a = 1
    b = a
    a = 0
    print(a) # 0
    print(b) # 1
    
    # 对
    a = [1, 2, 3]
    b = a
    a[0] = 0
    print(a) # [0, 2, 3]
    print(b) # [0, 2, 3]

    内存回收机制

    每一个对象有两个标准的头部信息:

    计数器记录了当前指向该对象引用的数目,一旦对象的计数器为 0 ,即不存在对该对象的引用,则这个对象的内存空间会被回收,和Javascript中基本一致, 可以通过sys模块中的getrefcount()函数查询一个对象计数器的值。

    import sys
    sys.getrefcount(1)
    # 实测python的编译过程和打印乃至getrefcount这个函数本身都会对目标对象造成多余的引用计数

    数据类型

    数字 Numbers

    三种类型:

    运算相关:

    字符串 String

    方法:str()包含一堆内建函数

    三种符号表示方式(三引号保持原有格式):

    两种操作/读取方式:

    示例:

    var1 = 'Hello World!'
    print ("已更新字符串 : ", var1[:6] + 'Surmon!')
    # 已更新字符串 :  Hello Surmon!

    列表 List

    简单说:类似数组,可嵌套,可作为堆栈使用

    基本格式:['str', 1, ['hello']],拥有各种类似数组操作的方法,访问方式可使用下标、中括号[index:index]

    元组 Tuple

    简单说:类似列表,但只读。

    基本格式:('', ''),和列表类似,拥有只读特性,可拼接,拥有基本操作方法。

    集合 Sets

    简单说:是一个无序不重复元素的序列

    基本格式:{ }字面量 或 set()方法,创建一个空集合必须用set()而不是{ }字面量,因为{ }字面量是用来创建一个空字典。

    复杂说:类似于数学中的集合,可以进行成员关系测试(交、差、并、补集),还可以用来去重。

    BTW:类似于Jvascript中的Set数据结构。

    字典 Dictionary

    简单说:就是对象

    与Javascript并无太大异样,多了一些方法,和一些方法名称的不同,仅可通过obj[key]访问成员。

    迭代器和生成器

    就是Javascript中的Generator和yield,一句话的话就是:交出函数(运算)的执行权,即暂停执行。

    两个参考链接:

    # 阮一峰 - Javascript 中的 Generator

    # Python3 中的迭代器和生成器

    函数

    普通函数基本没区别,区别的地方: 函数形参可以加一个*将函数所有不固定参数合并在一个元组,若参数为空,则返回一个空元组。

    和Jvascript比的话,就是ES5中的构造函数,ES6中的class。

    它用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。

    对象是类的实例。就是面向对象啦,上下文不再是this,而是类函数中的首参(一般定义为self)。

    类的专有方法:

    包和模块

    Python中,包为内聚单位,当然它只是抽象的,它可能是个文件夹或是其他whatever,他的意义就是更好地管理模块的命名空间。

    假设现在有个模块的名称是A.B, 那么他表示一个包A中的子模块B。 就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用package.moduleName这种形式也不用担心不同库之间的模块重名的情况。

    Python中以文件为模块单位,模块中又可以区分不同的类、方法、对象或任何其他数据,和Node.js中的模块大同小异。

    核心语句:

    核心对象和模块

    多线程

    多线程类似于同时执行多个不同程序,多线程运行有很多优点。

    线程分为:

    Python3中线程相关的两个模块:

    一般可以使用函数或者用类来包装线程对象。

    本文转自:https://surmon.me/article/39

    专题推荐:python
    品易云
    上一篇:2020年04月最新 Web 服务器流行度调查报告 下一篇:用Python深度分析微信群聊,拥有高质量社群!

    相关文章推荐

    • python中的frame是什么意思?• 如何保存python程序所生产的数据?• python字典打印乱码怎么解决• python如何查找是否存在某个变量?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网