学习笔记——Python:第一阶段

1. 语言特点

  • 面对对象
  • 解释性
  • 免费开源
  • 可移植性
  • 胶水语言:可以调用C语言
  • 丰富的库
  • 代码规范性
  • 支持函数式编程
  • 动态类型:不会检查数据类型,在变量声明无需指定数据类型

2. 应用场景

  • 桌面应用开发:wxPython、Tkinter...
  • Web应用开发:Django、Flask、Tornado...
  • 自动化运维
  • 数据可视化:Matplotlib
  • 网络爬虫
  • 人工智能
  • 大数据
  • 游戏开发

3. 语法基础

3.1. 标识符——命名规则:
  • 区分大小写
  • 首字符不能是数字,可以是下划线或字母
  • 关键字不能作为标识符
  • 不能使用Python内置函数作为自身标识符
  • $#不能构成标识符:room#$Name属于非法标识符
3.2. 关键字

Python语言中有33个关键字,只有三个首字母大写:FalseTrueNone,其他全部小写。

3.3. 变量和常量

Python是动态类型语言,不能定义真正意义的常量。

3.4. 语句
  • 一行代码表示一条语句,语句结束可以加分号,但没必要
  • 多个变量赋值可以用链式结构:a = b = c =10,但没必要
  • ifforwhile内代码块不通过大括号界定,而是通过缩进
    if (a > b):
        print(a)
    
  • 考虑到不同编辑器Tab键缩进程度存在区别,编程规范建议采用4个空格代替Tab键
3.5. 模块
  • import <模块名>:使用模块元素时需加模块名为前缀
  • from <模块名> import <代码元素>
3.6. 包(package)命名空间
  • 通过目录的方式组织众多的模块,用来管理和分类模块
  • 包含__init__.py文件(可以为空文件),阐释该目录文件夹属性是包
  • 同名的模块可以放在不同的包下,以避免名称冲突

4. Python编码规范

4.1. 命名规范
  • 包名:全部小写字母,通过点连接分隔,不推荐使用下划线;包名应具有唯一性;推荐采用公司或组织域名的倒置,如com.apple.quicktime.v2
  • 模块名:全部小写字母,如果是多个单词构成,可以用下划线隔开,如dummy_threading
  • 类名:采用大驼峰法命名,如SplitViewController
  • 异常名:异常属于类,命名同类命名,但应该使用Error作为后缀,如FileNotError
  • 变量名:全部小写字母,如果是多个单词构成,可以用下划线隔开。如果变量应用于模块或函数内部,则变量名可以单下划线开头;如果变量类内部私有使用变量名可以双下划线开头。不要命名双下划线开头和结尾的变量,这是Python保留的。另外,避免使用小写L、大写O和大写I作为变量名
  • 函数名和方法名:同变量命名,如balance_account_push_cm_exit
  • 常量名:全部大写字母,多个单词构成通过下划线隔开,如YEARWEEK_OF_MONTH
4.2. 注释规范
  • 文件注释:在每个文件开头添加注释,采用多行注释。通常包括:版权信息、文件名、所在模块、作者信息、历史版本信息、文件内容和作用等。(给能编辑源代码的人看的)
    #
    # 版权所有 2015 ****有限公司
    # 许可信息查看LICENSE.txt文件
    # 描述:
    #  实现日期基本功能
    # 历史版本:
    #  2015-7-22:创建
    #  2015-8-20:添加socket库
    #  2015-8-22:添加math库
    #
    
  • 文档注释:文档字符串,注释内容能够生成API帮助文档,可以使用Python官方提供的pydoc工具从Python源代码文件中提取这些信息,也可以生成HTML文件。所有公有的模块、函数、类和方法都应该进行文档注释。(生成API帮助文档给人看)
    文档注释推荐使用一对三重双引号(""")包裹起来,注意不推荐使用三重单引号(''')。
  • 代码注释:注释太多 = 代码质量差
  • TODO注释:有些地方不能确定,或未完成。
    # TODO 有待解决
    
4.3. 导入规范
  • 导入语总是放在文件顶部,位于模块注释和文档注释之后,模块全局变量和常量之前
  • 每一个导入语句只能导入一个模块
    推荐使用:
    import re
    import struct
    import binascii
    
    不推荐使用:
    import re, struct, binascii
    
    但是from import后面可以多个代码元素
    from codeop import CommandCompiler, compile_command
    
  • 导入顺序:从通用到特殊,标准库→第三方库→自己模块,每一组之间有一个空行,且组中模块按照英文字典顺序进行排序
    # 标准库
    import io
    import os
    import pkgutil
    import sys
    import time
    
    from html import unescape   # 第三方库
    
    from com.pkg1 import example    # 自定义库
    
    Pycharm快捷键:Ctrl+Alt+O,可自动识别排版
4.4. 代码排版:包括空行、空格、断行和缩进等
  • Pycharm快捷键:Ctrl+Alt+L,可自动进行格式排版
  • 空行:
    import语句块前后保留两个空行;
    ②函数声明之前保留两个空行;
    ③类声明之前保留两个空行;
    ④方法声明之前保留一个空行;
    ⑤两个逻辑代码块之前应该保留一个空行。
  • 空格:
    ①赋值符号=前后各有一个空格;
    a = 10
    c = 10
    
    ②所有的二元运算符都应该使用空格与操作数分开;
    a += c + d
    
    ③一元运算符:算法运算符取反-和运算符取反~
    b = 10
    a = -b
    y = ~b
    
    ④括号内不要有空格,包括:()[]{}
    doque(cat[1],{dogs:2},[])   # 推荐用法
    doque(cat[ 1 ],{ dogs:2 },[ ])  # 不推荐
    
    ⑤不要在逗号、分号、冒号前面有空格,而是要在他们后面有一个空格,除非该符号已经是行尾。
    # 推荐
    if x == 88:
        print x, y
    x, y = y, x
    # 不推荐
    if x == 88 :
        print x , y
    x , y = y , x
    
    ⑥参数列表、索引或切片的左括号前不应有空格;
    # 推荐
    doque(1)
    dogs['key'] = list[index]
    # 不推荐
    doque (1)
    dogs ['key'] = list [index]
    
  • 缩进:4个空格常被作为缩进排版的一个级别。默认情况下一个制表符等于8个空格,且不同的IDE工具中一个制表符与空格对应的个数会有不同,所以尽量不要使用制表符缩进
  • 断行:一行代码最多79个字符。对于文档注释和多行注释时一行最多72个字符,超过需断行(若包含URL地址则不受限制)
    # 在逗号后面断开
    bar = long_function_name(name1, name2,
                name3, name4)
    def long_function_name(var_one, var_two,
                var_three, var_four):
    # 在运算符前面断开
    name1 = name2 * (name3 + name4
                - name5) + 4 * name6
    # 尽量不要使用续行符(\),当有符号(包括:大括号、中括号和小括号)则在括号中断开,这样可以不使用续行符。
    def long_function_name(var_one, var_two,
                var_three, var_four):
        return var_one + var_two + var_three \ 
            + var_four
        # 推荐加入括号换行
        return (var_one + var_two + var_three
            + var_four)
    

5. 数据类型

在Python中所有的数据类型都是类,每一个变量都是类的“实例”。没有基本数据类型的概念,所以整数、浮点和字符串也都是类。
Python有6种标准数据类型:数字、字符串、列表、元祖、集合和字典

5.1. 数字类型

包括整数类型、浮点类型、复数类型和布尔类型

  • 整数类型:Python中整数类型为int,范围只受计算机硬件的限制。表示方式如下:
    ①二进制数:以0b或0B为前缀,注意0是阿拉伯数字
    ②八进制数:以0o或者0O为前缀,第一个字符是阿拉伯数字0,第二个字符是英文字母o或O
    ③十六进制数:以0x或0X为前缀,注意0是阿拉伯数字
  • 浮点类型:Python中浮点类型为float
  • 复数类型:Python中复数类型为complex,例如1+2j表示的是实部1、虚部2的复数
  • 布尔类型:Python中布尔类型为bool,只有两个值:TrueFalse
    任何类型数据都可以通过bool()函数转换为布尔值,“没有的”、“空的”值会转换为False,反之转换为True
5.2. 数字类型相互转换
  • 隐式类型转换:多个数字类型数据之间可以进行数学计算,由于参与进行计算的数字类型可能不同,此时会发生隐式类型转换。

    a = 1 + True
    
  • 显式类型转换:int()float()bool()函数

    int(19.4)
    float(5)
    bool(2)
    
5.3. 字符串类型
  • 字符串表示方式:
    ①普通字符串:采用单引号'或双引号"包裹起来的字符串
    ②原始字符串:在普通字符串前加r,字符串中的特殊字符不需要转义,按照字符串的本来“面目”呈现

    a = "Hello \n world"
    print(a)
    a = r"Hello \n world"
    print(a)
    

    ③长字符串:字符串中包含了换行缩进等排版字符,可以使用三重单引号'''或三重双引号"""包裹起来

    a = '''Hello
        world'''
    print(a)
    
  • 字符串格式化:format()方法,字符串格式化控制符,以及占位符{}

    name = 'Mary'
    age = 18
    money = 1234.5678
    
    "{0}芳龄是{1:d}岁。".format(name, age)
    "{0}今天收入是{1:10.2f}元。".format(name, money)
    
  • 字符串查找
    str.find(sub[,start[,end]])
    str.rfind(sub[,start[,end]])

    source_str = "THere is a string accessing example."
    len(source_str)
    source_str.find('r')
    source_str.rfind('r')
    source_str[16]
    
  • 字符串与数字相互转换
    ①字符串转换为数字
    int()float()
    ②数字转换为字符串
    str()

6. 运算符

6.1. 算数运算符
  • 一元运算符:取反运算符-

  • 二元运算符:加减乘除、取余%、幂**以及地板除法//

    3 % 2
    10 ** 2
    3 // 2  # 比商小的最大整数,此处结果为1
    
6.2. 关系运算符

有6种:==!=><>=<=

6.3. 逻辑运算符

有3种:与and、或or、非not

6.4. 位运算符
  • 位反~~x:将x的值按位取反
  • 位与&x&y:x与y位进行位与运算
  • 位或|x|y:x与y位进行位或运算
  • 位异或^x^y:x与y位进行位异或运算
  • 有符号右移>>x>>a:x右移a位,高位采用符号位补位
  • 左移<<x<<a:x左移a位,低位用0补位
6.5. 赋值运算符

用于简写,主要包括:+=-=*=/=%=**=//=&=|=^=<<=>>=

6.6. 其他运算符
  • 同一性测试运算符:isis not
    注意:==is区别
    ==:测试两个对象内容是否相等
    is:测试两个对象是否是同一个对象
  • 成员测试运算符:innot in
6.7. 运算符优先级

7. 控制语句

7.1. 分支语句

if结构:

  • if结构:

    if 条件:
        语句组
    
  • if-else结构:

    if 条件:
        语句组1
    else:
        语句组2
    
  • elif结构,类似switch语句:

    if 条件1:
        语句组1
    elif 条件2:
        语句组2
    elif 条件3:
        语句组3
    ...
    elif 条件n:
        语句组n
    else:
        语句组n+1
    
  • 三元运算符替代品——条件表达式

    表达式1 if 条件 else 表达式2
    
7.2. 循环语句

whilefor

  • while语句
    while 循环条件:
        语句组
    [else:
        语句组]
    
  • for语句
    for 迭代变量 in 序列:
        语句组
    [else:
        语句组]
    
    for num in range(1, 10):
        print('{0} * {0} = {1}'.format(num, num * num))
    
7.3. 跳转语句

breakcontinuereturn

  • break语句:遇到break跳出循环体

    for item in range(10):
        if item == 3:
            break
        
        print('Count is: {0}'.format(item))
    # 打印 0、1、2
    
  • continue语句:遇到continue语句结束当次循环,continue之后的语句不再执行,接着执行下次循环

    for item in range(10):
        if item == 3:
            continue
        
        print('Count is: {0}'.format(item))
    # 打印 0-9,除了3
    
  • whilefor中的else语句:whilefor正常循环结束时走的else语句

    while i * i < 10:
        i += 1
        print('{0} * {0} = {1}'.format(i, i * i))
    else:
        print('While Over!')
    # 打印 0-9,除了3
    
7.4. 使用范围

范围在Python中类型是range,表示一个整数序列,创建范围对象使用range()函数,range()函数语法如下:
range([start,]stop[,step])

注意:start≤整数序列取值<stop,步长step可以为负数,可以创建递减序列

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容