python学习笔记 ---- 一. 注释 1. 单行注释(行注释): a. 以 `#` 开头,`#` 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用。 b. 为了保证代码的可读性,`#` 后面建议先添加一个空格,然后再编写相应的说明文字。 c. **为了保证代码的可读性**,**注释和代码之间** 至少要有 **两个空格** 示例代码如下: print("hello python") ?# 输出 `hello python`
2. 多行注释(块注释): 要在 Python 程序中使用多行注释,可以用 **一对 连续的 三个 引号**(单引号和双引号都可以) 示例代码如下: """ 这是一个多行注释
在多行注释之间,可以写很多很多的内容…… """? print("hello python")
二. 关于代码规范 1. Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文档 其中第 8 篇文档专门针对 **Python 的代码格式** 给出了建议,也就是俗称的 **PEP 8** 文档地址:https://www.python.org/dev/peps/pep-0008/ 谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
2. 任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步
三. 算数运算符 1.? | 运算符 | ?描述 ?| 实例 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | :----: | :----: | ------------------------------------------ | | ? + ? ?| ? 加 ? | 10 + 20 = 30 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | ? - ? ?| ? 减 ? | 10 - 20 = -10 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | ? * ? ?| ? 乘 ? | 10 * 20 = 200 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | ? / ? ?| ? 除 ? | 10 / 20 = 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | ? // ? | 取整除 | 返回除法的整数部分(商) 9 // 2 输出结果 4 | | ? % ? ?| 取余数 | 返回除法的余数 9 % 2 = 1 ? ? ? ? ? ? ? ? ? | | ? ** ? | ? 幂 ? | 又称次方、乘方,2 ** 3 = 8 ? ? ? ? ? ? ? ? |
2. 在 Python 中 `*` 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果 In [1]: "-" * 50 Out[1]: '----------------------------------------'?
3. 算数运算符的优先级 a. 和数学中的运算符的优先级一致,在 Python 中进行数学计算时,同样也是: **先乘除后加减** 同级运算符是 **从左至右** 计算 可以使用 `()` 调整计算的优先级
b. 以下表格的算数优先级由高到最低顺序排列 | 运算符 ? | 描述 ? ? ? ? ? ? ? ? ? | | -------- | ---------------------- | | ** ? ? ? | 幂 (最高优先级) ? ? ? ?| | * / % // | 乘、除、取余数、取整除 | | + - ? ? ?| 加法、减法 ? ? ? ? ? ? |
四. 变量 1. 在内存中创建一个变量,会包括: ? 1. 变量的名称 ? 2. 变量保存的数据 ? 3. 变量存储数据的类型 ? 4. 变量的地址(标示)
2. 变量的类型 * 在 `Python` 中定义变量是 **不需要指定类型**(在其他很多高级语言中都需要) * 数据类型可以分为 **数字型** 和 **非数字型** * 数字型 ? * 整型 (`int`) ? * 浮点型(`float`) ? * 布尔型(`bool`)? ? ? * 真 `True` `非 0 数` —— **非零即真** ? ? * 假 `False` `0` ? * 复数型 (`complex`) ? ? * 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题 * 非数字型 ? * 字符串 ? * 列表 ? * 元组 ? * 字典
3. 使用 `type` 函数可以查看一个变量的类型 In [1]: type(name)
4. ### 不同类型变量之间的计算 1) **数字型变量** 之间可以直接计算 * 在 Python 中,两个数字型变量是可以直接进行 算数运算的 * 如果变量是 `bool` 型,在计算时 ? * `True` 对应的数字是 `1` ? * `False` 对应的数字是 `0` 2) 在 Python 中,字符串之间可以使用 `+` 拼接生成新的字符串 In [1]: first_name = "三" In [2]: last_name = "张" In [3]: first_name + last_name Out[3]: '三张' 3) **字符串变量** 可以和 **整数** 使用 `*` 重复拼接相同的字符串 In [1]: "-" * 50 Out[1]: '--------------------------------------------------' 4) **数字型变量** 和 **字符串** 之间 **不能进行其他计算** In [1]: first_name = "zhang" In [2]: x = 10 In [3]: x + first_name --------------------------------------------------------------------------- TypeError: unsupported operand type(s) for +: 'int' and 'str' 类型错误:`+` 不支持的操作类型:`int` 和 `str`
5. 变量的输入 1) #### ?input 函数实现键盘输入 * 在 Python 中可以使用 `input` 函数从键盘等待用户的输入 * 用户输入的 **任何内容** Python 都认为是一个 **字符串** * 语法如下: 字符串变量 = input("提示信息:") 2) 类型转换函数 | 函数 ? ? | 说明 ? ? ? ? ? ? ? ? ?| | -------- | --------------------- | | int(x) ? | 将 x 转换为一个整数 ? | | float(x) | 将 x 转换到一个浮点数 |
6. 变量的格式化输出 `%` 被称为 **格式化操作符**,专门用于处理字符串中的格式 * 包含 `%` 的字符串,被称为 **格式化字符串** * `%` 和不同的 **字符** 连用,**不同类型的数据** 需要使用 **不同的格式化字符** | 格式化字符 | 含义 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | ---------- | ------------------------------------------------------------ | | %s ? ? ? ? | 字符串 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | %d ? ? ? ? | 有符号十进制整数,`%06d` 表示输出的整数显示位数,不足的地方使用 `0` 补全 | | %f ? ? ? ? | 浮点数,`%.2f` 表示小数点后只显示两位 ? ? ? ? ? ? ? ? ? ? ? ?| | %% ? ? ? ? | 输出 `%` ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 语法格式如下: print("格式化字符串" % 变量1) print("格式化字符串" % (变量1, 变量2...))
7. 变量的命名 1) ## 0.1 标识符和关键字 ### 1.1 标识符 > 标示符就是程序员定义的 **变量名**、**函数名** > **名字** 需要有 **见名知义** 的效果,见下图: * 标示符可以由 **字母**、**下划线** 和 **数字** 组成 * **不能以数字开头** * **不能与关键字重名** 2) ### 关键字 * **关键字** 就是在 `Python` 内部已经使用的标识符 * **关键字** 具有特殊的功能和含义 * 开发者 **不允许定义和关键字相同的名字的标示符** 通过以下命令可以查看 `Python` 中的关键字 In [1]: import keyword In [2]: print(keyword.kwlist) 3) 变量的命名规则 **注意** `Python` 中的 **标识符** 是 **区分大小写的** 1. 在定义变量时,为了保证代码格式,`=` 的左右应该各保留一个空格 2. 在 `Python` 中,如果 **变量名** 需要由 **二个** 或 **多个单词** 组成时,可以按照以下方式命名 ? ?1. 每个单词都使用小写字母 ? ?2. 单词与单词之间使用 **`_`下划线** 连接 ? ?* 例如:`first_name`、`last_name`、`qq_number`、`qq_password` 3. 驼峰命名法 * 当 **变量名** 是由二个或多个单词组成时,还可以利用驼峰命名法来命名 * **小驼峰式命名法** ? * 第一个单词以小写字母开始,后续单词的首字母大写 ? * 例如:`firstName`、`lastName` * **大驼峰式命名法** ? * 每一个单词的首字母都采用大写字母 ? * 例如:`FirstName`、`LastName`、`CamelCase`?
五. 判断(if)语句 1.? if 条件1: ? ? 条件1满足执行的代码 ? ? …… elif 条件2: ? ? 条件2满足时,执行的代码 ? ? …… elif 条件3: ? ? 条件3满足时,执行的代码 ? ? …… else: ? ? 以上条件都不满足时,执行的代码 ? ? ……
2. `if` 的嵌套 if 条件 1: ? ? 条件 1 满足执行的代码 ? ? …… ? ?? ? ? if 条件 1 基础上的条件 2: ? ? ? ? 条件 2 满足时,执行的代码 ? ? ? ? …… ? ? ? ? ? ?? ? ? # 条件 2 不满足的处理 ? ? else: ? ? ? ? 条件 2 不满足时,执行的代码 ? ? ? ?? # 条件 1 不满足的处理 else: ? ? 条件1 不满足时,执行的代码
六. 随机数的处理 import random `random.randint(a, b)` ,返回 `[a, b]` 之间的整数,包含 `a` 和 `b` random.randint(12, 20) ?# 生成的随机数n: 12 <= n <= 20 ?? random.randint(20, 20) ?# 结果永远是 20 ?? random.randint(20, 10) ?# 该语句是错误的,下限必须小于上限
七. 循环 1. `while` 语句基本语法 初始条件设置 —— 通常是重复执行的 计数器
while 条件(判断 计数器 是否达到 目标次数): ? ? 条件满足时,做的事情1 ? ? 条件满足时,做的事情2 ? ? 条件满足时,做的事情3 ? ? ...(省略)... ? ?? ? ? 处理条件(计数器 + 1)
2. `while` 循环嵌套 while 条件 1: ? ? 条件满足时,做的事情1 ? ? 条件满足时,做的事情2 ? ? 条件满足时,做的事情3 ? ? ...(省略)... ? ?? ? ? while 条件 2: ? ? ? ? 条件满足时,做的事情1 ? ? ? ? 条件满足时,做的事情2 ? ? ? ? 条件满足时,做的事情3 ? ? ? ? ...(省略)... ? ?? ? ? ? ? 处理条件 2 ? ?? ? ? 处理条件 1
3. ## break 和 continue > `break` 和 `continue` 是专门在循环中使用的关键字 * `break` **某一条件满足时**,退出循环,不再执行后续重复的代码 * `continue` **某一条件满足时**,不执行后续重复的代码 > `break` 和 `continue` 只针对 **当前所在循环** 有效
4. **知识点** 对 `print` 函数的使用做一个增强 * 在默认情况下,`print` 函数输出内容之后,会自动在内容末尾增加换行 * 如果不希望末尾增加换行,可以在 `print` 函数输出内容的后面增加 `, end=""` * 其中 `""` 中间可以指定 `print` 函数输出内容之后,继续希望显示的内容 * 语法格式如下: # 向控制台输出内容结束之后,不会换行 print("*", end="") # 单纯的换行 print("") `end=""` 表示向控制台输出内容结束之后,不会换行
5. **字符串中的转义字符** * `\t` 在控制台输出一个 **制表符**,协助在输出文本时 **垂直方向** 保持对齐 * `\n` 在控制台输出一个 **换行符** > **制表符** 的功能是在不使用表格的情况下在 **垂直方向** 按列对齐文本 | 转义字符 | 描述 ? ? ? | | -------- | ---------- | | \\\\ ? ? | 反斜杠符号 | | \\' ? ? ?| 单引号 ? ? | | \\" ? ? ?| 双引号 ? ? | | \n ? ? ? | 换行 ? ? ? | | \t ? ? ? | 横向制表符 | | \r ? ? ? | 回车 ? ? ? |
八. 函数基础 1. 函数的定义 定义函数的格式如下: def 函数名(): ? ? 函数封装的代码 ? ? ……
2. 函数调用 调用函数很简单的,通过 `函数名()` 即可完成对函数的调用
3. 思考 * 能否将 **函数调用** 放在 **函数定义** 的上方? ? * 不能! ? * 因为在 **使用函数名** 调用函数之前,必须要保证 `Python` 已经知道函数的存在 ? * 否则控制台会提示 `NameError: name 'say_hello' is not defined` (**名称错误:say_hello 这个名字没有被定义**)
4. 代码示例 name = "小明"
# 解释器知道这里定义了一个函数 def say_hello(): ? ? print("hello 1") ? ? print("hello 2") ? ? print("hello 3")
print(name) # 只有在调用函数时,之前定义的函数才会被执行 # 函数执行完成之后,会重新回到之前的程序中,继续执行后续的代码 say_hello()
print(name)
5. 函数的返回值 在函数中使用 `return` 关键字可以返回结果 代码示例: def sum_2_num(num1, num2): ? ? """对两个数字的求和"""
? ? return num1 + num2
# 调用函数,并使用 result 变量接收计算结果 result = sum_2_num(10, 20)
print("计算结果是 %d" % result)
6. ## 使用模块中的函数 > **模块是 Python 程序架构的一个核心概念** * **模块** 就好比是 **工具包**,要想使用这个工具包中的工具,就需要 **导入 import** 这个模块 * 每一个以扩展名 `py` 结尾的 `Python` 源代码文件都是一个 **模块** * 在模块中定义的 **全局变量** 、 **函数** 都是模块能够提供给外界直接使用的工具
* 可以 **在一个 Python 文件** 中 **定义 变量 或者 函数** * 然后在 **另外一个文件中** 使用 `import` 导入这个模块 * 导入之后,就可以使用 `模块名.变量` / `模块名.函数` 的方式,使用这个模块中定义的变量或者函数
====
|