• python基础


    一、语句和语法

    【1】注释 #、''' '''

    #这里是单行注释
    
    '''这里是多行注释'''

    【2】继续

      pthon语句中,一般使用换行分隔,一行一个语句。一行语句过长可以使用反斜杠()分解成几行。

    a = 1
    b = 2
    c = 3
    print(a + b 
          +c)

    【3】多个语句构成代码组 : 

      缩进相同的一组语句构成一个代码块,我们称之代码组。像 if、while、def 和 class 这样 的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。 我们将首行及后面的代码组称为一个子句(clause)。 

    n = 10
    if n > 0:
        print(n)

    【4】代码组由不同的缩进分隔 

    if a:
        statement1 
        statement2
    else:
        statement3

    【5】同一行书写多个语句

      分号( ; )允许你将多个语句写在同一行上,语句之间用分号隔开,而这些语句也不能在这 行开始一个新的代码块。

    print('a');print('b')

      同一行上书写多个语句会大大降低代码的可读性,Python 虽然允许但不 提倡你这么做。 

    二、变量赋值

      等号(=)是主要的赋值运算符。

    aInt = 12
    aString = 'python'
    aFloat = -3.1415
    aList = [1,2,3,4,5]

      注意:赋值并不是直接将一个值赋给一个变量,在 Python 语言中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还 是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量 

     【1】链式赋值

      Python 的赋值语句不会返回值。 

    x = 1
    y = (x= x+1)
    print(x,y)
    #SyntaxError: invalid syntax
    x = 1
    y = x= x+1
    print(x,y)
    #2,2

    【2】增量赋值

    x = x + 1
    #可以写成
    x += 1

    【3】多重赋值

    a = b = c =1
    print(a,b,c)
    #1 1 1

    【4】“多元”赋值

    a, b , c = 1, 2, 'python'
    print(a,b,c)
    #1 2 python

    三、标识符

    【1】合法的python标识符

    • 第一个字符必须是字母或下划线(_)
    • 剩下的字符可以是字母和数字或下划线
    • 大小写敏感 

     注意:标识符不能以数字开头;除了下划线,其他的符号都不允许使用。 

    【2】关键字

    and     as      assert     break     class      continue    def     del
    elif    else    except     exec      finally    for         from    global
    if      in      import     is        lambda     not         or      pass
    print   raise   return     try       while      with        yield

      查看关键字:

    import keyword
    print(keyword.kwlist)

    【3】命名规范

    • 小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog
    • 大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName
    • 不过在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf

    四、基本风格 

      用模块来合理组织你的 Python 代码是简单又自然的方法。你应该建立一种统一且容易阅读 的结构,并将它应用到每一个文件中去。下面就是一种非常合理的布局:

      # (1) 起始行(Unix)

      # (2) 模块文档

      # (3) 模块导入

      # (4) 变量定义

      # (5) 类定义

      # (6) 函数定义

      # (7) 主程序
      下面是一个典型模块的内部结构图解。

      (1) 起始行

        通常只有在类 Unix 环境下才使用起始行,有起始行就能够仅输入脚本名字来执行脚本,无 需直接调用解释器。

      (2)模块文档

        简要介绍模块的功能及重要全局变量的含义,模块外可通过 module.__doc__ 访问这些内 容。

      (3)模块导入

        导入当前模块的代码需要的所有模块;每个模块仅导入一次(当前模块被加载时);函数内部的模块导入代码不会被执行, 除非该函数正在执行。  

      (4)变量定义

        这里定义的变量为全局变量,本模块中的所有函数都可直接使用。从好的编程风格角度说, 除非必须,否则就要尽量使用局部变量代替全局变量,如果坚持这样做,你的代码就不但容易

    维护,而且还可以提高性能并节省内存。

      (5)类定义语句

        所有的类都需要在这里定义。当模块被导入时 class 语句会被执行, 类也就会被定义。类 的文档变量是 class.__doc__。

      (6)函数定义语句

        此处定义的函数可以通过 module.function()在外部被访问到,当模块被导入时 def 语句 会被执行, 函数也就都会定义好,函数的文档变量是 function.__doc__。

      (7) 主程序

        无论这个模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码。通常这里 不会有太多功能性代码,而是根据执行的模式调用不同的函数。 

    五、内存管理

    • 变量无须事先声明
    • 变量无须指定类型
    • 程序员不用关心内存管理 变量名会被“回收”
    • del 语句能够直接释放资源 

    【1】变量定义

      在 python 中,无需此类显式变量声明语句,变量在第一次被赋值时自动声明。和其他大 多数语言一样,变量只有被创建和赋值后才能被使用。 

    >>>a
    Traceback (innermost last):
    File "<stdin>", line 1, in ?
    NameError: a

      变量一旦被赋值,可以通过变量名来访问它

    a = 1
    b ='python'
    print(a,b)

    【2】动态类型

      还要注意一点,Python 中不但变量名无需事先声明,而且也无需类型声明。Python 语言中, 对象的类型和内存占用都是运行时确定的。尽管代码被编译成字节码,Python 仍然是一种解释 型语言。在创建--也就是赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型。 在对象创建后,一个该对象的应用会被赋值给左侧的变量。

    【3】内存分配

      在为变量分配内存时,是在借用系统资源,在用完之 后, 应该释放借用的系统资源。Python 解释器承担了内存管理的复杂任务, 这大大简化了应 用程序的编写。你只需要关心你要解决的问题,至于底层的事情放心交给 Python 解释器去做就 行了。 

    【4】 引用计数

      要保持追踪内存中的对象, Python 使用了引用计数这一简单技术。也就是说 Python 内部 记录着所有使用中的对象各有多少引用。你可以将它想像成扑克牌游戏“黑杰克”或“21 点”。 一个内部跟踪变量,称为一个引用计数器。至于每个对象各有多少个引用, 简称引用计数。当 对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的 引用计数变为 0 时, 它被垃圾回收。(严格来说这不是 100%正确,不过现阶段你可以就这么认为) 

    • 增加引用计数

      当对象被创建并(将其引用)赋值给变量时,该对象的引用计数就被设置为 1。

      当同一个对象(的引用)又被赋值给其它变量时,或作为参数传递给函数, 方法或类实例 时, 或者被赋值为一个窗口对象的成员时,该对象的一个新的引用,或者称作别名,就被创建 (则该对象的引用计数自动加 1)。 

      请看以下声明:

    x = 3.14
    y= x

      语句 x=3.14 创建了一个浮点数对象并将其引用赋值给 x。 x 是第一个引用, 因此,该 对象的引用计数被设置为 1。语句 y=x 创建了一个指向同一对象的别名 y(参阅下图)。事 实上并没有为 Y 创建一个新对象, 而是该对象的引用计数增加了 1 次(变成了 2)。这是对象 引用计数增加的方式之一。还有一些其它的方式也能增加对象的引用计数, 比如该对象作为参 数被函数调用或这个对象被加入到某个容器对象当中时。

                      

      总之,对象的引用计数在

      对象被创建
      x = 3.14
      或另外的别名被创建
      y= x
      或被作为参数传递给函数(新的本地引用) foobar(x) 

    或成为容器对象的一个元素 myList = [123, x, 'xyz']

      下面让我们来看下引用计数是如何减少的

    • 减少引用计数

      当对象的引用被销毁时,引用计数会减小。最明显的例子就是当引用离开其作用范围时, 这种情况最经常出现在函数运行结束时,所有局部变量都被自动销毁,对象的引用计数也就随 之减少。

    当变量被赋值给另外一个对象时,原对象的引用计数也会自动减 1:

    foo = 'xyz'
    bar = foo
    foo = 123

      当字符串对象"xyz"被创建并赋值给 foo 时, 它的引用计数是 1. 当增加了一个别名 bar 时, 引用计数变成了 2. 不过当 foo 被重新赋值给整数对象 123 时, xyz 对象的引用计数自

    动减 1,又重新变成了 1.

      其它造成对象的引用计数减少的方式包括使用 del 语句删除一个变量(参阅下一节), 或 者当一个对象被移出一个窗口对象时(或该容器对象本身的引用计数变成了 0 时)。总结一下, 一个对象的引用计数在以下情况会减少:

    • 一个本地引用离开了其作用范围。比如 foobar()(参见上一下例子)函数结束时。
    • 对象的别名被显式的销毁。del y # or del x
    • 对象的一个别名被赋值给其它的对象 x = 123
    • 对象被从一个窗口对象中移除  myList.remove(x)
    • 窗口对象本身被销毁 del myList # or goes out-of-scope 
    • del 语句

        Del 语句会删除对象的一个引用,它的语法是: del obj1[, obj2[,... objN]]

        例如,在上例中执行 del y 会产生两个结果:

        1、从现在的名字空间中删除y

        2、x的引用计数减一 

      引申一步, 执行 del x 会删除该对象的最后一个引用, 也就是该对象的引用计数会减为 0, 这会导致该对象从此“无法访问”或“无法抵达”。 从此刻起, 该对象就成为垃圾回收 机制的回收对象。 注意任何追踪或调试程序会给一个对象增加一个额外的引用, 这会推迟该对象被回收的时间。 

    五、垃圾收集

      不再被使用的内存会被一种称为垃圾收集的机制释放。象上面说的, 虽然解释器跟踪对象 的引用计数, 但垃圾收集器负责释放内存。垃圾收集器是一块独立代码, 它用来寻找引用计 数为 0 的对象。它也负责检查那些虽然引用计数大于 0 但也应该被销毁的对象。 特定情形会导 致循环引用。

      一个循环引用发生在当你有至少两个对象互相引用时, 也就是说所有的引用都消失时, 这 些引用仍然存在, 这说明只靠引用计数是不够的。Python 的垃圾收集器实际上是一个引用计 数器和一个循环垃圾收集器。 当一个对象的引用计数变为 0,解释器会暂停,释放掉这个对象 和仅有这个对象可访问(可到达)的其它对象。作为引用计数的补充, 垃圾收集器也会留心被 分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下 来, 试图清理所有未引用的循环。 

    参考:python核心编程第二版

  • 相关阅读:
    【代码整合】导航
    【代码片段】简易de幻灯片解说prevScene() & nextScene()方法
    PHP file函数技巧去除每个元素换行符,去除空行元素
    windows ldap 小例子
    VI 如何格式化代码
    php通过Active Directory简单验证LDAP
    linux系统监控常用命令
    使用wget 命令下载链接文件
    【转】关于sql的书写
    php数组合并:array_merge与 “+”
  • 原文地址:https://www.cnblogs.com/Jiangchuanwei/p/8471328.html
Copyright © 2020-2023  润新知